Revision
23307
Author
zarzycki@apple.com
Date
2007-07-12 13:05:47 -0700 (Thu, 12 Jul 2007)

Log Message

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

Modified Paths

Diff

Modified: trunk/launchd/src/libvproc.c (23306 => 23307)


--- trunk/launchd/src/libvproc.c	2007-07-11 23:16:02 UTC (rev 23306)
+++ trunk/launchd/src/libvproc.c	2007-07-12 20:05:47 UTC (rev 23307)
@@ -395,7 +395,7 @@
 vproc_err_t
 _vprocmgr_log_drain(vproc_t vp __attribute__((unused)), pthread_mutex_t *mutex, _vprocmgr_log_drain_callback_t func)
 {
-	mach_msg_type_number_t outdata_cnt;
+	mach_msg_type_number_t outdata_cnt, tmp_cnt;
 	vm_offset_t outdata = 0;
 	struct logmsg_s *lm;
 
@@ -407,17 +407,22 @@
 		return _vprocmgr_log_drain;
 	}
 
+	tmp_cnt = outdata_cnt;
+
 	if (mutex) {
 		pthread_mutex_lock(mutex);
 	}
 
-	for (lm = (struct logmsg_s *)outdata; lm->obj_sz; lm = ((void *)lm + lm->obj_sz)) {
+	for (lm = (struct logmsg_s *)outdata; tmp_cnt > 0; lm = ((void *)lm + lm->obj_sz)) {
 		lm->from_name += (size_t)lm;
 		lm->about_name += (size_t)lm;
 		lm->msg += (size_t)lm;
 		lm->session_name += (size_t)lm;
 
-		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);
+		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);
+
+		tmp_cnt -= lm->obj_sz;
 	}
 
 	if (mutex) {