Revision: 23054 http://trac.macosforge.org/projects/launchd/changeset/23054 Author: zarzycki@apple.com Date: 2007-02-09 19:25:34 -0800 (Fri, 09 Feb 2007) Log Message: ----------- Misc 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-02-09 22:51:16 UTC (rev 23053) +++ trunk/launchd/src/launchd_core_logic.c 2007-02-10 03:25:34 UTC (rev 23054) @@ -201,7 +201,6 @@ char *jm_stdout; char *jm_stderr; unsigned int global_on_demand_cnt; - unsigned int would_have_sigkilled; unsigned int transfer_bstrap:1, sent_stop_to_hopeful_jobs:1, shutting_down:1; char name[0]; }; @@ -1771,14 +1770,7 @@ void job_kill(job_t j) { - if (debug_shutdown_hangs) { - j->mgr->would_have_sigkilled++; - if (j->mgr->would_have_sigkilled >= total_children) { - job_assumes(j, host_reboot(mach_host_self(), HOST_REBOOT_DEBUGGER) == 0); - } - } else { - job_assumes(j, kill(j->p, SIGKILL) != -1); - } + job_assumes(j, kill(j->p, SIGKILL) != -1); } void @@ -1788,8 +1780,13 @@ switch (kev->filter) { case EVFILT_PROC: - job_reap(j); - job_dispatch(j, false); + if (kev->fflags & NOTE_EXEC) { + job_log(j, LOG_DEBUG, "Called execve()"); + } + if (kev->fflags & NOTE_EXIT) { + job_reap(j); + job_dispatch(j, false); + } break; case EVFILT_TIMER: if ((uintptr_t)j == kev->ident || (uintptr_t)&j->start_interval == kev->ident) { @@ -1925,7 +1922,7 @@ job_assumes(j, close(spair[1]) == 0); ipc_open(_fd(spair[0]), j); } - if (kevent_mod(c, EVFILT_PROC, EV_ADD, NOTE_EXIT, 0, &j->kqjob_callback) == -1) { + if (kevent_mod(c, EVFILT_PROC, EV_ADD, NOTE_EXEC|NOTE_EXIT, 0, &j->kqjob_callback) == -1) { job_log_error(j, LOG_ERR, "kevent()"); job_reap(j); } else { @@ -3501,13 +3498,8 @@ void machservice_delete(struct machservice *ms) { - if (ms->recv) { - if (ms->isActive) { - /* FIXME we should cancel the notification */ - job_log(ms->job, LOG_DEBUG, "Mach service deleted while we didn't own the receive right: %s", ms->name); - } else { - job_assumes(ms->job, launchd_mport_close_recv(ms->port) == KERN_SUCCESS); - } + if (ms->recv && job_assumes(ms->job, !ms->isActive)) { + job_assumes(ms->job, launchd_mport_close_recv(ms->port) == KERN_SUCCESS); } job_assumes(ms->job, launchd_mport_deallocate(ms->port) == KERN_SUCCESS);
participants (1)
-
source_changes@macosforge.org