[launchd-changes] [23182] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Sun Mar 25 12:52:03 PDT 2007
Revision: 23182
http://trac.macosforge.org/projects/launchd/changeset/23182
Author: zarzycki at apple.com
Date: 2007-03-25 12:52:03 -0700 (Sun, 25 Mar 2007)
Log Message:
-----------
Add basic support for a job to be kept alive based on whether another job is running or not.
Modified Paths:
--------------
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/liblaunch_public.h
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2007-03-23 20:33:04 UTC (rev 23181)
+++ trunk/launchd/src/launchd_core_logic.c 2007-03-25 19:52:03 UTC (rev 23182)
@@ -184,6 +184,8 @@
FAILED_EXIT,
PATH_EXISTS,
PATH_MISSING,
+ OTHER_JOB_ACTIVE,
+ OTHER_JOB_INACTIVE,
PATH_CHANGES,
DIR_NOT_EMPTY,
// FILESYSTEMTYPE_IS_MOUNTED, /* for nfsiod, but maybe others */
@@ -200,6 +202,7 @@
static void semaphoreitem_delete(job_t j, struct semaphoreitem *si);
static void semaphoreitem_setup(launch_data_t obj, const char *key, void *context);
static void semaphoreitem_setup_paths(launch_data_t obj, const char *key, void *context);
+static void semaphoreitem_setup_otherjobs(launch_data_t obj, const char *key, void *context);
static void semaphoreitem_callback(job_t j, struct kevent *kev);
static void semaphoreitem_watch(job_t j, struct semaphoreitem *si);
static void semaphoreitem_ignore(job_t j, struct semaphoreitem *si);
@@ -3111,6 +3114,7 @@
SLIST_FOREACH(si, &j->semaphores, sle) {
bool wanted_state = false;
int qdir_file_cnt;
+ job_t other_j;
switch (si->why) {
case NETWORK_UP:
@@ -3129,6 +3133,16 @@
return true;
}
break;
+ case OTHER_JOB_ACTIVE:
+ wanted_state = true;
+ case OTHER_JOB_INACTIVE:
+ if ((other_j = job_find(si->what))) {
+ if ((bool)other_j->p == wanted_state) {
+ job_log(j, LOG_DEBUG, "KeepAlive: The following job is %s: %s", wanted_state ? "active" : "inactive", si->what);
+ return true;
+ }
+ }
+ break;
case PATH_EXISTS:
wanted_state = true;
case PATH_MISSING:
@@ -4005,6 +4019,17 @@
}
void
+semaphoreitem_setup_otherjobs(launch_data_t obj, const char *key, void *context)
+{
+ job_t j = context;
+ semaphore_reason_t why;
+
+ why = launch_data_get_bool(obj) ? OTHER_JOB_ACTIVE : OTHER_JOB_INACTIVE;
+
+ semaphoreitem_new(j, why, key);
+}
+
+void
semaphoreitem_setup_paths(launch_data_t obj, const char *key, void *context)
{
job_t j = context;
@@ -4031,6 +4056,9 @@
} else if (strcasecmp(key, LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE) == 0 &&
launch_data_get_type(obj) == LAUNCH_DATA_DICTIONARY) {
launch_data_dict_iterate(obj, semaphoreitem_setup_paths, j);
+ } else if (strcasecmp(key, LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBSTATE) == 0 &&
+ launch_data_get_type(obj) == LAUNCH_DATA_DICTIONARY) {
+ launch_data_dict_iterate(obj, semaphoreitem_setup_otherjobs, j);
}
}
Modified: trunk/launchd/src/liblaunch_public.h
===================================================================
--- trunk/launchd/src/liblaunch_public.h 2007-03-23 20:33:04 UTC (rev 23181)
+++ trunk/launchd/src/liblaunch_public.h 2007-03-25 19:52:03 UTC (rev 23182)
@@ -106,6 +106,7 @@
#define LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT "SuccessfulExit"
#define LAUNCH_JOBKEY_KEEPALIVE_NETWORKSTATE "NetworkState"
#define LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE "PathState"
+#define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBSTATE "OtherJobState"
#define LAUNCH_JOBKEY_CAL_MINUTE "Minute"
#define LAUNCH_JOBKEY_CAL_HOUR "Hour"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070325/95f53495/attachment.html
More information about the launchd-changes
mailing list