Revision: 23346 http://trac.macosforge.org/projects/launchd/changeset/23346 Author: zarzycki@apple.com Date: 2007-08-24 14:31:24 -0700 (Fri, 24 Aug 2007) Log Message: ----------- <rdar://problem/5330262> Cancelled FUS restart kills pre-login launchd agent 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-08-17 20:48:49 UTC (rev 23345) +++ trunk/launchd/src/launchd_core_logic.c 2007-08-24 21:31:24 UTC (rev 23346) @@ -5614,7 +5614,9 @@ } SLIST_FOREACH(jmi, &root_jobmgr->submgrs, sle) { - if (strcasecmp(jmi->name, where) == 0) { + if (jmi->shutting_down) { + continue; + } else if (strcasecmp(jmi->name, where) == 0) { goto jm_found; } else if (strcasecmp(jmi->name, VPROCMGR_SESSION_BACKGROUND) == 0 && getpid() == 1) { SLIST_FOREACH(jmi2, &jmi->submgrs, sle) { @@ -5709,6 +5711,31 @@ SLIST_REMOVE(&j->mgr->parentmgr->submgrs, j->mgr, jobmgr_s, sle); j->mgr->parentmgr = background_jobmgr; SLIST_INSERT_HEAD(&j->mgr->parentmgr->submgrs, j->mgr, sle); + } else if (strcmp(session_type, VPROCMGR_SESSION_LOGINWINDOW) == 0) { + jobmgr_t jmi; + + /* + * 5330262 + * + * We're working around LoginWindow and the WindowServer. + * + * In practice, there is only one LoginWindow session. * Unfortunately, for certain + * scenarios, the WindowServer spawns loginwindow, and in those cases, it frequently + * spawns a replacement loginwindow session before cleaning up the previous one. + * + * We're going to use the creation of a new LoginWindow context as a clue that the + * previous LoginWindow context is on the way out and therefore we should just + * kick-start the shutdown of it. + */ + + SLIST_FOREACH(jmi, &root_jobmgr->submgrs, sle) { + if (jmi->shutting_down) { + continue; + } else if (strcasecmp(jmi->name, session_type) == 0) { + jobmgr_shutdown(jmi); + break; + } + } } jobmgr_log(j->mgr, LOG_DEBUG, "Renaming to: %s", session_type);
participants (1)
-
source_changes@macosforge.org