Projects
Browse Source     Search     Timeline     Wiki

Changeset 23307

Show
Ignore:
Timestamp:
07/12/07 13:05:47 (17 months ago)
Author:
zarzycki@…
Message:

<rdar://problem/5328938> 9A491: syslogd crashed 12 times in _vprocmgr_log_drain

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/launchd/src/libvproc.c

    r23297 r23307  
    396396_vprocmgr_log_drain(vproc_t vp __attribute__((unused)), pthread_mutex_t *mutex, _vprocmgr_log_drain_callback_t func) 
    397397{ 
    398         mach_msg_type_number_t outdata_cnt; 
     398        mach_msg_type_number_t outdata_cnt, tmp_cnt; 
    399399        vm_offset_t outdata = 0; 
    400400        struct logmsg_s *lm; 
     
    408408        } 
    409409 
     410        tmp_cnt = outdata_cnt; 
     411 
    410412        if (mutex) { 
    411413                pthread_mutex_lock(mutex); 
    412414        } 
    413415 
    414         for (lm = (struct logmsg_s *)outdata; lm->obj_sz; lm = ((void *)lm + lm->obj_sz)) { 
     416        for (lm = (struct logmsg_s *)outdata; tmp_cnt > 0; lm = ((void *)lm + lm->obj_sz)) { 
    415417                lm->from_name += (size_t)lm; 
    416418                lm->about_name += (size_t)lm; 
     
    418420                lm->session_name += (size_t)lm; 
    419421 
    420                 func(&lm->when, lm->from_pid, lm->about_pid, lm->sender_uid, lm->sender_gid, lm->pri, lm->from_name, lm->about_name, lm->session_name, lm->msg); 
     422                func(&lm->when, lm->from_pid, lm->about_pid, lm->sender_uid, lm->sender_gid, lm->pri, 
     423                                lm->from_name, lm->about_name, lm->session_name, lm->msg); 
     424 
     425                tmp_cnt -= lm->obj_sz; 
    421426        } 
    422427