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

source_changes at macosforge.org source_changes at macosforge.org
Fri Nov 17 15:08:15 PST 2006


Revision: 22957
          http://trac.macosforge.org/projects/launchd/changeset/22957
Author:   zarzycki at apple.com
Date:     2006-11-17 15:08:14 -0800 (Fri, 17 Nov 2006)

Log Message:
-----------
<rdar://problem/4537339> BootRoot: launchd needs to call kextd early if is_bootrooted()

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

Modified: trunk/launchd/src/launchctl.c
===================================================================
--- trunk/launchd/src/launchctl.c	2006-11-16 22:49:29 UTC (rev 22956)
+++ trunk/launchd/src/launchctl.c	2006-11-17 23:08:14 UTC (rev 22957)
@@ -64,6 +64,7 @@
 
 #include "libbootstrap_public.h"
 #include "libvproc_public.h"
+#include "libvproc_private.h"
 #include "libvproc_internal.h"
 #include "liblaunch_public.h"
 #include "liblaunch_private.h"
@@ -1218,8 +1219,6 @@
 		do_potential_fsck();
 	}
 
-	do_bootroot_magic();
-
 	if (path_check("/var/account/acct")) {
 		assumes(acct("/var/account/acct") != -1);
 	}
@@ -1256,6 +1255,8 @@
 
 	preheat_page_cache_hack();
 
+	_vproc_set_global_on_demand(true);
+
 	char *load_launchd_items[] = { "load", "-D", "all", "/etc/mach_init.d", NULL };
 	if (is_safeboot())
 		load_launchd_items[2] = "system";
@@ -1264,6 +1265,10 @@
 	const char *bcc_tag_tool[] = { "BootCacheControl", "tag", NULL };
 	assumes(fwexec(bcc_tag_tool, true) != -1);
 
+	do_bootroot_magic();
+
+	_vproc_set_global_on_demand(false);
+
 	const char *SystemStarter_tool[] = { "SystemStarter", NULL };
 	assumes(fwexec(SystemStarter_tool, false) != -1);
 

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2006-11-16 22:49:29 UTC (rev 22956)
+++ trunk/launchd/src/launchd_core_logic.c	2006-11-17 23:08:14 UTC (rev 22957)
@@ -376,7 +376,7 @@
 	struct machservice *ms;
 	struct watchpath *wp;
 
-	if (!job_assumes(j, j->currently_ignored)) {
+	if (!j->currently_ignored) {
 		return;
 	}
 
@@ -1642,7 +1642,7 @@
 		return;
 	} else if (job_useless(j)) {
 		job_remove(j);
-	} else if (global_on_demand_cnt == 0 && (kickstart || job_keepalive(j))) {
+	} else if (kickstart || job_keepalive(j)) {
 		job_start(j);
 	} else {
 		job_watch(j);
@@ -2688,6 +2688,10 @@
 	bool good_exit = (WIFEXITED(j->last_exit_status) && WEXITSTATUS(j->last_exit_status) == 0);
 	bool dispatch_others = false;
 
+	if (global_on_demand_cnt > 0) {
+		return false;
+	}
+
 	if (j->runatload && j->start_time == 0) {
 		job_log(j, LOG_DEBUG, "KeepAlive check: job needs to run at least once.");
 		return true;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20061117/9485f152/attachment.html


More information about the launchd-changes mailing list