[launchd-changes] [23881] trunk/launchd/src

source_changes at macosforge.org source_changes at macosforge.org
Thu Apr 2 18:36:18 PDT 2009


Revision: 23881
          http://trac.macosforge.org/projects/launchd/changeset/23881
Author:   dsorresso at apple.com
Date:     2009-04-02 18:36:18 -0700 (Thu, 02 Apr 2009)
Log Message:
-----------
<rdar://problem/6745714> launchd mis-identifies stray processes for termination at shutdown

Modified Paths:
--------------
    trunk/launchd/src/launch.h
    trunk/launchd/src/launchd_core_logic.c

Modified: trunk/launchd/src/launch.h
===================================================================
--- trunk/launchd/src/launch.h	2009-04-03 01:35:19 UTC (rev 23880)
+++ trunk/launchd/src/launch.h	2009-04-03 01:36:18 UTC (rev 23881)
@@ -100,6 +100,7 @@
 #define LAUNCH_JOBKEY_THROTTLEINTERVAL				"ThrottleInterval"
 #define LAUNCH_JOBKEY_LAUNCHONLYONCE				"LaunchOnlyOnce"
 #define LAUNCH_JOBKEY_ABANDONPROCESSGROUP			"AbandonProcessGroup"
+#define LAUNCH_JOBKEY_IGNOREPROCESSGROUPATSHUTDOWN	"IgnoreProcessGroupAtShutdown"
 #define LAUNCH_JOBKEY_POLICIES						"Policies"
 #define LAUNCH_JOBKEY_ENABLETRANSACTIONS			"EnableTransactions"
 

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2009-04-03 01:35:19 UTC (rev 23880)
+++ trunk/launchd/src/launchd_core_logic.c	2009-04-03 01:36:18 UTC (rev 23881)
@@ -510,6 +510,7 @@
 		    deny_unknown_mslookups		:1,	/* A flag for changing the behavior of bootstrap_look_up() */
 		    unload_at_mig_return		:1,	/* A job thoroughly confused launchd. We need to unload it ASAP */
 		    abandon_pg					:1,	/* man launchd.plist --> AbandonProcessGroup */
+			ignore_pg_at_shutdown		:1, /* During shutdown, do not send SIGTERM to stray processes in the process group of this job. */
 	     	poll_for_vfs_changes		:1,	/* a hack to work around the fact that kqueues don't work on all filesystems */
 	     	deny_job_creation			:1,	/* Don't let this job create new 'job_t' objects in launchd */
 	     	kill_via_shmem				:1,	/* man launchd.plist --> EnableTransactions */
@@ -1690,6 +1691,9 @@
 			}
 			j->no_init_groups = !value;
 			found_key = true;
+		} else if( strcasecmp(key, LAUNCH_JOBKEY_IGNOREPROCESSGROUPATSHUTDOWN) == 0 ) {
+			j->ignore_pg_at_shutdown = value;
+			found_key = true;
 		}
 		break;
 	case 'r':
@@ -5693,7 +5697,7 @@
 		/* We might have some jobs hanging around that we've decided to shut down in spite of. */
 		job_t j = jobmgr_find_by_pid(jm, p_i, false);
 		if( !j || (j && j->anonymous) ) {
-			jobmgr_log(jm, LOG_INFO | 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);
+			jobmgr_log(jm, LOG_INFO | 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( pp_i == getpid() && !jobmgr_assumes(jm, kp[i].kp_proc.p_stat != SZOMB) ) {
@@ -5702,7 +5706,17 @@
 				}
 				kp_skipped++;
 			} else {
-				ps[i] = p_i;
+				job_t leader = jobmgr_find_by_pid(jm, pg_i, false);
+				/* See rdar://problem/6745714. Some jobs have child processes that back kernel state,
+				 * so we don't want to terminate them. Long-term, I'd really like to provide shutdown
+				 * hints to the kernel along the way, so that it could shutdown certain subsystems when
+				 * their userspace emissaries go away, before the call to reboot(2).
+				 */
+				if( leader && leader->ignore_pg_at_shutdown ) {
+					kp_skipped++;
+				} else {
+					ps[i] = p_i;
+				}
 			}
 		} else {
 			kp_skipped++;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/launchd-changes/attachments/20090402/5f61bbc5/attachment.html>


More information about the launchd-changes mailing list