Revision: 23053 http://trac.macosforge.org/projects/launchd/changeset/23053 Author: zarzycki@apple.com Date: 2007-02-09 14:51:16 -0800 (Fri, 09 Feb 2007) Log Message: ----------- Move call to exit() and reboot() to jobmgr_remove(root_jobmgr). Modified Paths: -------------- trunk/launchd/src/launchd.c trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_core_logic.h Modified: trunk/launchd/src/launchd.c =================================================================== --- trunk/launchd/src/launchd.c 2007-02-09 22:31:36 UTC (rev 23052) +++ trunk/launchd/src/launchd.c 2007-02-09 22:51:16 UTC (rev 23053) @@ -417,7 +417,7 @@ rlcj = NULL; - root_jobmgr = jobmgr_shutdown(root_jobmgr); + launchd_assert(jobmgr_shutdown(root_jobmgr) != NULL); } void @@ -624,7 +624,8 @@ void launchd_post_kevent(void) { - if (shutdown_in_progress && (!root_jobmgr || jobmgr_is_idle(root_jobmgr))) { +#if 0 + if (shutdown_in_progress && jobmgr_is_idle(root_jobmgr)) { shutdown_in_progress = false; if (getpid() == 1) { @@ -632,11 +633,9 @@ kill(-1, SIGKILL); /* One last time, just to clear the room */ launchd_assumes(execl("/sbin/launchd", "/sbin/launchd", "-s", NULL) != -1); } - launchd_assumes(reboot(RB_HALT) != -1); - } else { - exit(EXIT_SUCCESS); } } +#endif if (getpid() == 1) { if (rlcj && job_active(rlcj)) { return; Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-02-09 22:31:36 UTC (rev 23052) +++ trunk/launchd/src/launchd_core_logic.c 2007-02-09 22:51:16 UTC (rev 23053) @@ -40,6 +40,7 @@ #include <sys/ucred.h> #include <sys/fcntl.h> #include <sys/un.h> +#include <sys/reboot.h> #include <sys/wait.h> #include <sys/sysctl.h> #include <sys/sockio.h> @@ -211,6 +212,7 @@ static jobmgr_t jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t checkin_port); static jobmgr_t jobmgr_parent(jobmgr_t jm); static jobmgr_t jobmgr_tickle(jobmgr_t jm); +static bool jobmgr_is_idle(jobmgr_t jm); static void jobmgr_log_stray_children(jobmgr_t jm); static void jobmgr_remove(jobmgr_t jm); static void jobmgr_dispatch_all(jobmgr_t jm); @@ -576,6 +578,10 @@ if (jm->parentmgr) { SLIST_REMOVE(&jm->parentmgr->submgrs, jm, jobmgr_s, sle); jobmgr_tickle(jm->parentmgr); + } else if (getpid() == 1) { + jobmgr_assumes(jm, reboot(RB_HALT) != -1); + } else { + exit(EXIT_SUCCESS); } free(jm); Modified: trunk/launchd/src/launchd_core_logic.h =================================================================== --- trunk/launchd/src/launchd_core_logic.h 2007-02-09 22:31:36 UTC (rev 23052) +++ trunk/launchd/src/launchd_core_logic.h 2007-02-09 22:51:16 UTC (rev 23053) @@ -31,7 +31,6 @@ void jobmgr_set_stdout(jobmgr_t jm, const char *what); void jobmgr_set_stderr(jobmgr_t jm, const char *what); -bool jobmgr_is_idle(jobmgr_t jm); jobmgr_t jobmgr_shutdown(jobmgr_t jm); void jobmgr_dispatch_all_semaphores(jobmgr_t jm); job_t jobmgr_find(jobmgr_t jm, const char *label);