[launchd-changes] [23899] trunk/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Fri Apr 17 14:37:52 PDT 2009


Revision: 23899
          http://trac.macosforge.org/projects/launchd/changeset/23899
Author:   dsorresso at apple.com
Date:     2009-04-17 14:37:51 -0700 (Fri, 17 Apr 2009)
Log Message:
-----------
<rdar://problem/6787083> Finder refuses to launch after Force Quit (error -10810)

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

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2009-04-16 22:18:10 UTC (rev 23898)
+++ trunk/launchd/src/launchd_core_logic.c	2009-04-17 21:37:51 UTC (rev 23899)
@@ -8532,9 +8532,24 @@
 	otherj = job_dispatch(otherj, true);
 
 	if (!job_assumes(j, otherj && otherj->p)) {
+		/* <rdar://problem/6787083> Clear this flag if we failed to start the job. */
+		otherj->stall_before_exec = false;
 		return BOOTSTRAP_NO_MEMORY;
 	}
 
+	/* If any of these proceeding steps fail, we return an error to the client.
+	 * the problem is that, if the client has requested the job be stalled before
+	 * exec(2), the client won't be able to uncork the fork(2), leaving the job
+	 * forever stalled until the client tries again and we successfully start
+	 * the job.
+	 *
+	 * See <rdar://problem/6787083> for more about the implications.
+	 *
+	 * Fortunately, these next actions should pretty much never fail. In the
+	 * future, we should look at cleaning up after these failures if the job
+	 * was started in a stalled state.
+	 */
+
 	kern_return_t kr = task_name_for_pid(mach_task_self(), otherj->p, out_name_port);
 	if (!job_assumes(j, kr == 0)) {
 		return kr;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/launchd-changes/attachments/20090417/e09867b4/attachment.html>


More information about the launchd-changes mailing list