Revision: 23330 http://trac.macosforge.org/projects/launchd/changeset/23330 Author: zarzycki@apple.com Date: 2007-08-07 09:29:30 -0700 (Tue, 07 Aug 2007) Log Message: ----------- Bug 5321044 is rare. I suspect that the kernel is at fault, but I need more data from those few who experience it in the wild. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-08-06 15:24:48 UTC (rev 23329) +++ trunk/launchd/src/launchd_core_logic.c 2007-08-07 16:29:30 UTC (rev 23330) @@ -3058,7 +3058,7 @@ job_log(j, LOG_DEBUG, "Watching Vnode: %d", si->fd); if (!job_assumes(j, kevent_mod(si->fd, EVFILT_VNODE, EV_ADD, fflags, 0, j) != -1)) { /* Extra logging for 5321044 */ - job_log(j, LOG_ERR, "Bug (5321044): si->fd == %d fflags = 0x%x j == %p", si->fd, fflags, j); + job_log(j, LOG_ERR, "Bug (5321044): si->why == %u si->fd == %d fflags = 0x%x j == %p", si->why, si->fd, fflags, j); } } Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2007-08-06 15:24:48 UTC (rev 23329) +++ trunk/launchd/src/launchd_runtime.c 2007-08-07 16:29:30 UTC (rev 23330) @@ -698,6 +698,7 @@ kevent_mod(uintptr_t ident, short filter, u_short flags, u_int fflags, intptr_t data, void *udata) { struct kevent kev; + int r; switch (filter) { case EVFILT_READ: @@ -708,6 +709,8 @@ break; } + flags |= EV_RECEIPT; + if (flags & EV_ADD && !launchd_assumes(udata != NULL)) { errno = EINVAL; return -1; @@ -715,7 +718,24 @@ EV_SET(&kev, ident, filter, flags, fflags, data, udata); - return kevent(mainkq, &kev, 1, NULL, 0, NULL); + r = kevent(mainkq, &kev, 1, &kev, 1, NULL); + +#define BUG_5321044_RESEARCH 1 +#if BUG_5321044_RESEARCH + if (r != 1) { + runtime_syslog(LOG_ERR, "Bug (5321044): kevent_mod() == %d", r); + return -1; + } + + if (launchd_assumes(kev.flags & EV_ERROR)) { + if ((flags & EV_ADD) && kev.data) { + runtime_syslog(LOG_ERR, "Bug (5321044): See next line."); + log_kevent_struct(LOG_ERR, &kev, 0); + } + } +#endif + + return r; } boolean_t
participants (1)
-
source_changes@macosforge.org