[launchd-changes] [23057] trunk/launchd/src/launchd_core_logic.c
source_changes at macosforge.org
source_changes at macosforge.org
Sun Feb 11 21:21:36 PST 2007
Revision: 23057
http://trac.macosforge.org/projects/launchd/changeset/23057
Author: zarzycki at apple.com
Date: 2007-02-11 21:21:36 -0800 (Sun, 11 Feb 2007)
Log Message:
-----------
<rdar://problem/4989673> Bug: launchd_core_logic.c:604 (23046):3: j->p == 0
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-12 05:08:01 UTC (rev 23056)
+++ trunk/launchd/src/launchd_core_logic.c 2007-02-12 05:21:36 UTC (rev 23057)
@@ -273,7 +273,7 @@
importing_global_env:1, importing_hard_limits:1, setmask:1, legacy_mach_job:1, runatload:1;
mode_t mask;
unsigned int globargv:1, wait4debugger:1, unload_at_exit:1, stall_before_exec:1, only_once:1,
- currently_ignored:1, forced_peers_to_demand_mode:1, setnice:1, hopefully_exits_last:1;
+ currently_ignored:1, forced_peers_to_demand_mode:1, setnice:1, hopefully_exits_last:1, removal_pending:1;
char label[0];
};
@@ -599,17 +599,21 @@
struct machservice *ms;
struct semaphoreitem *si;
- job_log(j, LOG_DEBUG, "Removed");
+ if (j->p) {
+ job_log(j, LOG_DEBUG, "Removal pended until the job exits.");
+ if (!j->removal_pending) {
+ j->removal_pending = true;
+ job_stop(j);
+ }
+
+ return;
+ }
+
if (j->forced_peers_to_demand_mode) {
job_set_global_on_demand(j, false);
}
- if (!job_assumes(j, j->p == 0)) {
- job_assumes(j, kill(j->p, SIGKILL) != -1);
- job_reap(j);
- }
-
if (!job_assumes(j, j->forkfd == 0)) {
job_assumes(j, close(j->forkfd) != -1);
}
@@ -689,6 +693,8 @@
jobmgr_tickle(j->mgr);
}
+ job_log(j, LOG_DEBUG, "Removed");
+
free(j);
}
@@ -2850,6 +2856,9 @@
}
job_log(j, LOG_INFO, "Exited. Was only configured to run once.");
return true;
+ } else if (j->removal_pending) {
+ job_log(j, LOG_DEBUG, "Exited while removal was pending.");
+ return true;
} else if (j->mgr->shutting_down) {
job_log(j, LOG_NOTICE, "Exited while shutdown in progress. Processes remaining: %u", total_children);
return true;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070211/a125cff0/attachment.html
More information about the launchd-changes
mailing list