[launchd-changes] [23951] branches/PR-7264615/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Tue Nov 17 16:45:29 PST 2009


Revision: 23951
          http://trac.macosforge.org/projects/launchd/changeset/23951
Author:   dsorresso at apple.com
Date:     2009-11-17 16:45:29 -0800 (Tue, 17 Nov 2009)
Log Message:
-----------
Yet again.

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

Modified: branches/PR-7264615/launchd/src/launchd_core_logic.c
===================================================================
--- branches/PR-7264615/launchd/src/launchd_core_logic.c	2009-11-18 00:24:45 UTC (rev 23950)
+++ branches/PR-7264615/launchd/src/launchd_core_logic.c	2009-11-18 00:45:29 UTC (rev 23951)
@@ -1427,28 +1427,11 @@
 		return NULL;
 	}
 
-	switch (kp.kp_eproc.e_ppid) {
-	case 0:
-		/* the kernel */
-		break;
-	case 1:
-		if (!pid1_magic) {
-			/* we cannot possibly find a parent job_t that is useful in this function */
-			break;
-		}
-		/* fall through */
-	default:
-		jp = jobmgr_find_by_pid(jm, kp.kp_eproc.e_ppid, true);
-		jobmgr_assumes(jm, jp != NULL);
-		break;
-	}
-
 	if (jp && !jp->anonymous && unlikely(!(kp.kp_proc.p_flag & P_EXEC))) {
 		job_log(jp, LOG_DEBUG, "Called *fork(). Please switch to posix_spawn*(), pthreads or launchd. Child PID %u",
 				kp.kp_proc.p_pid);
 	}
 
-
 	/* A total hack: Normally, job_new() returns an error during shutdown, but anonymous jobs are special. */
 	if (unlikely(shutdown_state = jm->shutting_down)) {
 		jm->shutting_down = false;
@@ -1481,6 +1464,25 @@
 		jm->shutting_down = true;
 	}
 
+	/* This is down here to mitigate the effects of rdar://problem/7264615, in which a process
+	 * attaches to its own parent.
+	 */
+	switch (kp.kp_eproc.e_ppid) {
+		case 0:
+			/* the kernel */
+			break;
+		case 1:
+			if (!pid1_magic) {
+				/* we cannot possibly find a parent job_t that is useful in this function */
+				break;
+			}
+			/* fall through */
+		default:
+			jp = jobmgr_find_by_pid(jm, kp.kp_eproc.e_ppid, true);
+			jobmgr_assumes(jm, jp != NULL);
+			break;
+	}
+
 	return jr;
 }
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/launchd-changes/attachments/20091117/1abe12db/attachment.html>


More information about the launchd-changes mailing list