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

source_changes at macosforge.org source_changes at macosforge.org
Wed Sep 19 11:39:29 PDT 2007


Revision: 23415
          http://trac.macosforge.org/projects/launchd/changeset/23415
Author:   zarzycki at apple.com
Date:     2007-09-19 11:39:28 -0700 (Wed, 19 Sep 2007)

Log Message:
-----------
<rdar://problem/5492240> Code audit: order of operations problem can hang shutdown

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

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2007-09-19 17:47:36 UTC (rev 23414)
+++ trunk/launchd/src/launchd_core_logic.c	2007-09-19 18:39:28 UTC (rev 23415)
@@ -2015,7 +2015,7 @@
 		j->weird_bootstrap = false;
 	}
 
-	if (j->log_redirect_fd && (!j->wait4pipe_eof || j->mgr->shutting_down)) {
+	if (j->log_redirect_fd && !j->wait4pipe_eof) {
 		job_assumes(j, runtime_close(j->log_redirect_fd) != -1);
 		j->log_redirect_fd = 0;
 	}
@@ -3844,14 +3844,20 @@
 {
 	struct machservice *ms;
 
-	if (j->wait4pipe_eof && j->log_redirect_fd) {
-		return "Standard out/error is still valid";
-	}
-
 	if (j->p) {
 		return "PID is still valid";
 	}
 
+	if (j->mgr->shutting_down && j->log_redirect_fd) {
+		job_assumes(j, runtime_close(j->log_redirect_fd) != -1);
+		j->log_redirect_fd = 0;
+	}
+
+	if (j->log_redirect_fd) {
+		job_assumes(j, j->wait4pipe_eof);
+		return "Standard out/error is still valid";
+	}
+
 	if (j->priv_port_has_senders) {
 		return "Privileged Port still has outstanding senders";
 	}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070919/6c326ee1/attachment.html


More information about the launchd-changes mailing list