[launchd-changes] [23122] trunk/launchd/src/launchd_core_logic.c
source_changes at macosforge.org
source_changes at macosforge.org
Thu Mar 1 20:04:38 PST 2007
Revision: 23122
http://trac.macosforge.org/projects/launchd/changeset/23122
Author: zarzycki at apple.com
Date: 2007-03-01 20:04:37 -0800 (Thu, 01 Mar 2007)
Log Message:
-----------
<rdar://problem/5034268> Work around 5020256
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-03-01 19:19:11 UTC (rev 23121)
+++ trunk/launchd/src/launchd_core_logic.c 2007-03-02 04:04:37 UTC (rev 23122)
@@ -303,7 +303,7 @@
static void job_force_sampletool(job_t j);
static void job_reparent_hack(job_t j, const char *where);
static void job_callback(void *obj, struct kevent *kev);
-static void job_callback_proc(job_t j, int fflags);
+static void job_callback_proc(job_t j, int flags, int fflags);
static void job_callback_timer(job_t j, void *ident);
static void job_callback_read(job_t j, int ident);
static launch_data_t job_export2(job_t j, bool subjobs);
@@ -1661,7 +1661,16 @@
}
if (!job_assumes(j, wait4(j->p, &status, 0, &ru) != -1)) {
- return;
+ /*
+ * wait4() then kill() is still racy.
+ * Then again, we never should have got here in the first place...
+ */
+ if (kill(j->p, 0) == 0) {
+ job_log(j, LOG_DEBUG, "Working around 5020256");
+ }
+
+ status = 0;
+ memset(&ru, 0, sizeof(ru));
}
if (j->exit_timeout) {
@@ -1817,7 +1826,7 @@
}
void
-job_callback_proc(job_t j, int fflags)
+job_callback_proc(job_t j, int flags, int fflags)
{
if (fflags & NOTE_EXEC) {
job_log(j, LOG_DEBUG, "Called execve()");
@@ -1828,6 +1837,8 @@
}
if (fflags & NOTE_EXIT) {
+ job_assumes(j, (flags & EV_ONESHOT));
+ job_assumes(j, (flags & EV_EOF));
job_reap(j);
job_dispatch(j, false);
@@ -1904,7 +1915,7 @@
switch (kev->filter) {
case EVFILT_PROC:
- return job_callback_proc(j, kev->fflags);
+ return job_callback_proc(j, kev->flags, kev->fflags);
case EVFILT_TIMER:
return job_callback_timer(j, (void *)kev->ident);
case EVFILT_VNODE:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070301/0351c7ab/attachment.html
More information about the launchd-changes
mailing list