[launchd-changes] [23056] trunk/launchd/src/launchd_core_logic.c
source_changes at macosforge.org
source_changes at macosforge.org
Sun Feb 11 21:08:02 PST 2007
Revision: 23056
http://trac.macosforge.org/projects/launchd/changeset/23056
Author: zarzycki at apple.com
Date: 2007-02-11 21:08:01 -0800 (Sun, 11 Feb 2007)
Log Message:
-----------
kqueue dispatch clean up.
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-10 16:52:04 UTC (rev 23055)
+++ trunk/launchd/src/launchd_core_logic.c 2007-02-12 05:08:01 UTC (rev 23056)
@@ -129,7 +129,7 @@
static void socketgroup_delete(job_t j, struct socketgroup *sg);
static void socketgroup_watch(job_t j, struct socketgroup *sg);
static void socketgroup_ignore(job_t j, struct socketgroup *sg);
-static void socketgroup_callback(job_t j, struct kevent *kev);
+static void socketgroup_callback(job_t j);
static void socketgroup_setup(launch_data_t obj, const char *key, void *context);
struct calendarinterval {
@@ -141,7 +141,7 @@
static bool calendarinterval_new_from_obj(job_t j, launch_data_t obj);
static void calendarinterval_delete(job_t j, struct calendarinterval *ci);
static void calendarinterval_setalarm(job_t j, struct calendarinterval *ci);
-static void calendarinterval_callback(job_t j, struct kevent *kev);
+static void calendarinterval_callback(job_t j, void *ident);
struct envitem {
SLIST_ENTRY(envitem) sle;
@@ -303,6 +303,9 @@
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_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);
static job_t job_new_spawn(job_t j, const char *label, const char *path, const char *workingdir, const char *const *argv, const char *const *env, mode_t *u_mask, bool w4d);
static job_t job_new_via_mach_init(job_t j, const char *cmd, uid_t uid, bool ond);
@@ -1774,47 +1777,60 @@
}
void
+job_callback_proc(job_t j, int fflags)
+{
+ if (fflags & NOTE_EXEC) {
+ job_log(j, LOG_DEBUG, "Called execve()");
+ }
+
+ if (fflags & NOTE_EXIT) {
+ job_reap(j);
+ job_dispatch(j, false);
+ }
+}
+
+void
+job_callback_timer(job_t j, void *ident)
+{
+ if (j == ident || &j->start_interval == ident) {
+ job_dispatch(j, true);
+ } else if (&j->exit_timeout == ident) {
+ job_force_sampletool(j);
+ job_log(j, LOG_WARNING, "Exit timeout elapsed (%u seconds). Killing.", j->exit_timeout);
+ job_kill(j);
+ } else {
+ calendarinterval_callback(j, ident);
+ }
+}
+
+void
+job_callback_read(job_t j, int ident)
+{
+ if (ident == j->log_redirect_fd) {
+ job_log_stdouterr(j);
+ } else {
+ socketgroup_callback(j);
+ }
+}
+
+void
job_callback(void *obj, struct kevent *kev)
{
job_t j = obj;
switch (kev->filter) {
case EVFILT_PROC:
- 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;
+ return job_callback_proc(j, kev->fflags);
case EVFILT_TIMER:
- if ((uintptr_t)j == kev->ident || (uintptr_t)&j->start_interval == kev->ident) {
- job_dispatch(j, true);
- } else if ((uintptr_t)&j->exit_timeout == kev->ident) {
- job_force_sampletool(j);
- job_log(j, LOG_WARNING, "Exit timeout elapsed (%u seconds). Killing.", j->exit_timeout);
- job_kill(j);
- } else {
- calendarinterval_callback(j, kev);
- }
- break;
+ return job_callback_timer(j, (void *)kev->ident);
case EVFILT_VNODE:
- semaphoreitem_callback(j, kev);
- break;
+ return semaphoreitem_callback(j, kev);
case EVFILT_READ:
- if (kev->ident == (uintptr_t)j->log_redirect_fd) {
- job_log_stdouterr(j);
- } else {
- socketgroup_callback(j, kev);
- }
- break;
+ return job_callback_read(j, kev->ident);
case EVFILT_MACHPORT:
- job_dispatch(j, true);
- break;
+ return (void)job_dispatch(j, true);
default:
- job_assumes(j, false);
- break;
+ return (void)job_assumes(j, false);
}
}
@@ -2607,12 +2623,12 @@
}
void
-calendarinterval_callback(job_t j, struct kevent *kev)
+calendarinterval_callback(job_t j, void *ident)
{
struct calendarinterval *ci;
SLIST_FOREACH(ci, &j->cal_intervals, sle) {
- if ((uintptr_t)ci == kev->ident) {
+ if (ci == ident) {
break;
}
}
@@ -2704,7 +2720,7 @@
}
void
-socketgroup_callback(job_t j, struct kevent *kev)
+socketgroup_callback(job_t j)
{
job_dispatch(j, true);
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070211/03a56efe/attachment.html
More information about the launchd-changes
mailing list