[launchd-changes] [23814] branches/PR-6562592/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Tue Feb 17 13:00:19 PST 2009


Revision: 23814
          http://trac.macosforge.org/projects/launchd/changeset/23814
Author:   dsorresso at apple.com
Date:     2009-02-17 13:00:17 -0800 (Tue, 17 Feb 2009)
Log Message:
-----------
More tweaks.

Modified Paths:
--------------
    branches/PR-6562592/launchd/src/launchd_core_logic.c

Modified: branches/PR-6562592/launchd/src/launchd_core_logic.c
===================================================================
--- branches/PR-6562592/launchd/src/launchd_core_logic.c	2009-02-17 20:21:46 UTC (rev 23813)
+++ branches/PR-6562592/launchd/src/launchd_core_logic.c	2009-02-17 21:00:17 UTC (rev 23814)
@@ -5598,23 +5598,24 @@
 	}
 
 	start = runtime_get_opaque_time();
-	size_t i = 0, ns = 0;
+	size_t i = 0, n2t = 0;
 	for( i = 0; i < np; i++ ) {
 		if( p[i] != 0 ) {
 			EV_SET(&kev, p[i], EVFILT_PROC, EV_ADD, NOTE_EXIT, 0, 0);
 			
 			if( jobmgr_assumes(jm, kevent(kq, &kev, 1, NULL, 0, NULL) != -1) ) {
-				ns++;
+				jobmgr_assumes(jm, runtime_kill(p[i], SIGTERM) != -1);
+				n2t++;
+			} else {
+				jobmgr_log(jm, LOG_DEBUG | LOG_CONSOLE, "Disregarding PID %u and continuing.", p[i]);
+				p[i] = 0;
 			}
-			jobmgr_assumes(jm, runtime_kill(p[i], SIGTERM) != -1);
 		}
 	}
 
-	size_t nd = 0;
-	while( (r = kevent(kq, NULL, 0, &kev, 1, &tts)) ) {
+	while( n2t > 0 && (r = kevent(kq, NULL, 0, &kev, 1, &tts)) ) {
 		int status = 0;
 		waitpid((pid_t)kev.ident, &status, WNOHANG);
-		nd++;
 		
 		end = runtime_get_opaque_time();
 		nanosec = runtime_opaque_time_to_nano(end - start);
@@ -5625,21 +5626,17 @@
 		}
 	}
 
+	size_t n2k = 0;
 	for( i = 0; i < np; i++ ) {
 		if( p[i] != 0 ) {
-			EV_SET(&kev, p[i], EVFILT_PROC, EV_ADD, NOTE_EXIT, 0, 0);
-			
-			if( jobmgr_assumes(jm, kevent(kq, &kev, 1, NULL, 0, NULL) != -1) ) {
-				ns++;
-			}
 			jobmgr_assumes(jm, runtime_kill(p[i], SIGKILL) != -1);
+			n2k++;
 		}
 	}
 
-	while( (r = kevent(kq, NULL, 0, &kev, 1, &kts)) ) {
+	while( n2k > 0 && (r = kevent(kq, NULL, 0, &kev, 1, &kts)) ) {
 		int status = 0;
 		waitpid((pid_t)kev.ident, &status, WNOHANG);
-		nd++;
 		
 		end = runtime_get_opaque_time();
 		nanosec = runtime_opaque_time_to_nano(end - start);
@@ -5652,7 +5649,7 @@
 	
 	for( i = 0; i < np; i++ ) {
 		if( p[i] != 0 ) {
-			jobmgr_log(jm, LOG_DEBUG | LOG_CONSOLE, "Disregarding PID %u and continuing.", p[i]);
+			jobmgr_log(jm, LOG_NOTICE | LOG_CONSOLE, "PID %u did not die after being SIGKILL'ed 1 second ago.", p[i]);
 		}
 	}
 }
@@ -5699,8 +5696,8 @@
 			jobmgr_log(jm, LOG_WARNING | LOG_CONSOLE, "Stray %s %s at shutdown: PID %u PPID %u PGID %u %s", z, j ? "anonymous job" : "process", p_i, pp_i, pg_i, n);
 			
 			int status = 0;
-			if( (kp[i].kp_proc.p_stat == SZOMB) ) {
-				if( pp_i == getpid() && waitpid(p_i, &status, WNOHANG) == 0 ) {
+			if( pp_i == getpid() && !jobmgr_assumes(jm, kp[i].kp_proc.p_stat != SZOMB) ) {
+				if( jobmgr_assumes(jm, waitpid(p_i, &status, WNOHANG) == 0) ) {
 					jobmgr_log(jm, LOG_NOTICE | LOG_CONSOLE, "Unreaped zombie stray exited with status %i.", WEXITSTATUS(status));
 				}
 				kp_skipped++;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/launchd-changes/attachments/20090217/2a9cfd75/attachment.html>


More information about the launchd-changes mailing list