Revision
23964
Author
dsorresso@apple.com
Date
2009-12-02 18:13:30 -0800 (Wed, 02 Dec 2009)

Log Message

Uh... yeah. Actually do something when the timer fires this time. Also, handle the case of anonymous jobs creating subsets. Those should have hard references now.

Modified Paths

Diff

Modified: branches/PR-7431992/launchd/src/launchd_core_logic.c (23963 => 23964)


--- branches/PR-7431992/launchd/src/launchd_core_logic.c	2009-12-03 01:39:35 UTC (rev 23963)
+++ branches/PR-7431992/launchd/src/launchd_core_logic.c	2009-12-03 02:13:30 UTC (rev 23964)
@@ -547,7 +547,7 @@
 			clean_exit_timer_expired	:1, /* The job was clean, received SIGKILL and failed to exit after LAUNCHD_CLEAN_KILL_TIMER seconds. */
 			embedded_special_privileges	:1, /* The job runs as a non-root user on embedded but has select privileges of the root user. */
 			did_exec					:1, /* The job exec(2)ed successfully. */
-			migratory					:1, /* The (anonymous) job called vprocmgr_switch_to_session(). */
+			holds_ref					:1, /* The (anonymous) job called vprocmgr_switch_to_session(). */
 			jetsam_properties			:1; /* The job has Jetsam limits in place. */
 	mode_t mask;
 	pid_t tracing_pid;
@@ -668,6 +668,7 @@
 bool g_shutdown_debugging = false;
 bool g_verbose_boot = false;
 bool g_embedded_privileged_action = false;
+bool g_runtime_busy_time = false;
 
 void
 job_ignore(job_t j)
@@ -2777,7 +2778,7 @@
 	
 	if (j->anonymous) {
 		total_anon_children--;
-		if( j->migratory ) {
+		if( j->holds_ref ) {
 			runtime_del_ref();
 		}
 	} else {
@@ -3499,6 +3500,8 @@
 			jobmgr_still_alive_with_check(jm);
 		} else if( kev->ident == (uintptr_t)&jm->reboot_flags ) {
 			jobmgr_do_garbage_collection(jm);
+		} else if( kev->ident == (uintptr_t)&g_runtime_busy_time ) {
+			return launchd_shutdown();
 		}
 		break;
 	case EVFILT_VNODE:
@@ -5573,8 +5576,8 @@
 			if( phase == JOBMGR_PHASE_HOPEFULLY_EXITS_FIRST && !ji->hopefully_exits_first ) {
 				continue;
 			} else if( phase == JOBMGR_PHASE_NORMAL ) {
-				if( ji->migratory ) {
-					/* If we're shutting down, release the hold migratory jobs
+				if( ji->holds_ref ) {
+					/* If we're shutting down, release the hold holds_ref jobs
 					 * have on us.
 					 */
 					job_remove(ji);			
@@ -8318,7 +8321,7 @@
 	}
 	
 	j->mgr = target_jm;
-	j->migratory = true;
+	j->holds_ref = true;
 	*new_bsport = target_jm->jm_port;
 	
 	/* Anonymous jobs which move around are particularly interesting to us, so we want to
@@ -8507,6 +8510,11 @@
 	*subsetportp = jmr->jm_port;
 	jmr->properties |= BOOTSTRAP_PROPERTY_EXPLICITSUBSET;
 	
+	if( j->anonymous ) {
+		j->holds_ref = true;
+		runtime_add_ref();
+	}
+	
 	job_log(j, LOG_DEBUG, "Job created a subset named \"%s\"", jmr->name);
 	return BOOTSTRAP_SUCCESS;
 }

Modified: branches/PR-7431992/launchd/src/launchd_runtime.c (23963 => 23964)


--- branches/PR-7431992/launchd/src/launchd_runtime.c	2009-12-03 01:39:35 UTC (rev 23963)
+++ branches/PR-7431992/launchd/src/launchd_runtime.c	2009-12-03 02:13:30 UTC (rev 23964)
@@ -102,7 +102,6 @@
 static struct ldcred ldc;
 static size_t runtime_busy_cnt;
 static size_t runtime_standby_cnt;
-static size_t runtime_busy_time;
 
 static STAILQ_HEAD(, logmsg_s) logmsg_queue = STAILQ_HEAD_INITIALIZER(logmsg_queue);
 static size_t logmsg_queue_sz;
@@ -1628,7 +1627,7 @@
 runtime_install_timer(void)
 {
 	if( !pid1_magic && runtime_busy_cnt == 0 ) {
-		launchd_assumes(kevent_mod((uintptr_t)&runtime_busy_time, EVFILT_TIMER, EV_ADD, NOTE_SECONDS, 30, NULL) != -1);
+		launchd_assumes(kevent_mod((uintptr_t)&g_runtime_busy_time, EVFILT_TIMER, EV_ADD, NOTE_SECONDS, 30, root_jobmgr) != -1);
 	}
 }
 
@@ -1636,7 +1635,7 @@
 runtime_remove_timer(void)
 {
 	if( !pid1_magic && runtime_busy_cnt > 0 ) {
-		launchd_assumes(kevent_mod((uintptr_t)&runtime_busy_time, EVFILT_TIMER, EV_DELETE, 0, 0, NULL) != -1);
+		launchd_assumes(kevent_mod((uintptr_t)&g_runtime_busy_time, EVFILT_TIMER, EV_DELETE, 0, 0, NULL) != -1);
 	}
 }
 

Modified: branches/PR-7431992/launchd/src/launchd_runtime.h (23963 => 23964)


--- branches/PR-7431992/launchd/src/launchd_runtime.h	2009-12-03 01:39:35 UTC (rev 23963)
+++ branches/PR-7431992/launchd/src/launchd_runtime.h	2009-12-03 02:13:30 UTC (rev 23964)
@@ -108,6 +108,7 @@
 extern bool g_log_per_user_shutdown;
 extern bool g_log_strict_usage;
 extern bool g_embedded_shutdown_log;
+extern bool g_runtime_busy_time;
 extern int32_t g_sync_frequency;
 extern pid_t g_wsp;