Revision: 22996 http://trac.macosforge.org/projects/launchd/changeset/22996 Author: zarzycki@apple.com Date: 2006-12-22 11:05:56 -0800 (Fri, 22 Dec 2006) Log Message: ----------- <rdar://problem/4802454> CAS: WindowServer hangs in CGXProcessHIDEvent/.../CGXPseudoActivateWindow/.../_LSDoSetFrontProcess Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2006-12-21 19:43:50 UTC (rev 22995) +++ trunk/launchd/src/launchd_core_logic.c 2006-12-22 19:05:56 UTC (rev 22996) @@ -748,6 +748,11 @@ goto out_bad2; } + if (!job_assumes(j, launchd_mport_notify_req(j->j_port, MACH_NOTIFY_NO_SENDERS) == KERN_SUCCESS)) { + job_assumes(j, launchd_mport_close_recv(j->j_port) == KERN_SUCCESS); + goto out_bad; + } + return true; out_bad2: job_assumes(j, launchd_mport_close_recv(j->j_port) == KERN_SUCCESS); @@ -788,11 +793,6 @@ goto out_bad; } - if (!job_assumes(jr, launchd_mport_notify_req(jr->j_port, MACH_NOTIFY_NO_SENDERS) == KERN_SUCCESS)) { - job_assumes(jr, launchd_mport_close_recv(jr->j_port) == KERN_SUCCESS); - goto out_bad; - } - job_log(jr, LOG_INFO, "Legacy%s server created", ond ? " on-demand" : ""); return jr; @@ -2691,9 +2691,12 @@ bool job_useless(job_t j) { - /* Yes, j->unload_at_exit and j->j->only_once seem the same, but they'll differ someday... */ + /* Yes, j->unload_at_exit and j->only_once seem the same, but they'll differ someday... */ if ((j->unload_at_exit || j->only_once) && j->start_time != 0) { + if (j->unload_at_exit && j->j_port) { + return false; + } job_log(j, LOG_INFO, "Exited. Was only configured to run once."); return true; } else if (shutdown_in_progress) { Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2006-12-21 19:43:50 UTC (rev 22995) +++ trunk/launchd/src/libvproc.c 2006-12-22 19:05:56 UTC (rev 22996) @@ -170,22 +170,11 @@ return -1; } -#if 0 kern_return_t mpm_wait(mach_port_t ajob __attribute__((unused)), int *wstatus) { - /* Stubbed out for now... - * <rdar://problem/4802454> CAS: WindowServer hangs in CGXProcessHIDEvent/.../CGXPseudoActivateWindow/.../_LSDoSetFrontProcess - */ return vproc_mig_wait(ajob, wstatus); } -#else -kern_return_t -mpm_wait(mach_port_t ajob __attribute__((unused)), int *wstatus __attribute__((unused))) -{ - return MIG_BAD_ID; -} -#endif kern_return_t mpm_uncork_fork(mach_port_t ajob)