[launchd-changes] [23907] trunk/launchd/src/launchd_core_logic.c
source_changes at macosforge.org
source_changes at macosforge.org
Thu Apr 23 18:21:22 PDT 2009
Revision: 23907
http://trac.macosforge.org/projects/launchd/changeset/23907
Author: dsorresso at apple.com
Date: 2009-04-23 18:21:21 -0700 (Thu, 23 Apr 2009)
Log Message:
-----------
More complete fix for <rdar://problem/6803005>.
Modified Paths:
--------------
trunk/launchd/src/launchd_core_logic.c
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2009-04-23 20:28:24 UTC (rev 23906)
+++ trunk/launchd/src/launchd_core_logic.c 2009-04-24 01:21:21 UTC (rev 23907)
@@ -372,7 +372,7 @@
#define jobmgr_assumes(jm, e) \
(unlikely(!(e)) ? jobmgr_log_bug(jm, __LINE__), false : true)
-static jobmgr_t jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag, const char *name, mach_port_t session_port);
+static jobmgr_t jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag, const char *name, bool no_init, mach_port_t session_port);
static job_t jobmgr_import2(jobmgr_t jm, launch_data_t pload);
static jobmgr_t jobmgr_parent(jobmgr_t jm);
static jobmgr_t jobmgr_do_garbage_collection(jobmgr_t jm);
@@ -5521,14 +5521,14 @@
jobmgr_t
jobmgr_do_garbage_collection(jobmgr_t jm)
{
- if( !jm->shutting_down ) {
- return jm;
- }
-
jobmgr_t jmi = NULL, jmn = NULL;
SLIST_FOREACH_SAFE(jmi, &jm->submgrs, sle, jmn) {
jobmgr_do_garbage_collection(jmi);
}
+
+ if( !jm->shutting_down ) {
+ return jm;
+ }
if( SLIST_EMPTY(&jm->submgrs) ) {
jobmgr_log(jm, LOG_DEBUG, "No submanagers left.");
@@ -5800,7 +5800,7 @@
}
jobmgr_t
-jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag, const char *name, mach_port_t session_port)
+jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag, const char *name, bool no_init, mach_port_t session_port)
{
mach_msg_size_t mxmsgsz;
job_t bootstrapper = NULL;
@@ -5813,7 +5813,7 @@
return NULL;
}
- jmr = calloc(1, sizeof(struct jobmgr_s) + (name ? (strlen(name) + 1) : 128));
+ jmr = calloc(1, sizeof(struct jobmgr_s) + (name ? (strlen(name) + 1) : NAME_MAX + 1));
if (!jobmgr_assumes(jm, jmr != NULL)) {
return NULL;
@@ -5884,7 +5884,7 @@
jobmgr_assumes(jmr, kevent_mod(0, EVFILT_FS, EV_ADD, VQ_MOUNT|VQ_UNMOUNT|VQ_UPDATE, 0, jmr) != -1);
}
- if (name) {
+ if (name && !no_init) {
bootstrapper = jobmgr_init_session(jmr, name, sflag);
}
@@ -5994,7 +5994,7 @@
}
if (jm->req_port == port) {
- jobmgr_log(jm, LOG_INFO, "Request port died: 0x%x", port);
+ jobmgr_log(jm, LOG_DEBUG, "Request port died: %i", MACH_PORT_INDEX(port));
return jobmgr_shutdown(jm);
}
@@ -8117,7 +8117,7 @@
launchd_assert(launch_data_array_get_count(out_obj_array) == l2l_port_cnt);
- if (!job_assumes(j, (jmr = jobmgr_new(j->mgr, reqport, rcvright, false, session_type, audit_session)) != NULL)) {
+ if (!job_assumes(j, (jmr = jobmgr_new(j->mgr, reqport, rcvright, false, session_type, false, audit_session)) != NULL)) {
kr = BOOTSTRAP_NO_MEMORY;
goto out;
}
@@ -8166,6 +8166,7 @@
}
if (likely(ms = machservice_new(j_for_service, serv_name, &l2l_ports[l2l_i], serv_perpid))) {
+ job_log(j, LOG_DEBUG, "Importing %s into new bootstrap.", serv_name);
machservice_request_notifications(ms);
}
}
@@ -8228,7 +8229,7 @@
}
}
- jobmgr_log(j->mgr, LOG_DEBUG, "Initializing: %s", session_type);
+ jobmgr_log(j->mgr, LOG_DEBUG, "Initializing as %s", session_type);
strcpy(j->mgr->name_init, session_type);
if (job_assumes(j, (j2 = jobmgr_init_session(j->mgr, session_type, false)))) {
@@ -8263,7 +8264,7 @@
}
if( !target_jm ) {
- target_jm = jobmgr_new(j->mgr, requestor_port, MACH_PORT_NULL, false, session_name, audit_session);
+ target_jm = jobmgr_new(j->mgr, requestor_port, MACH_PORT_NULL, false, session_name, false, audit_session);
if( !target_jm ) {
mach_port_deallocate(mach_task_self(), audit_session);
} else {
@@ -8485,7 +8486,7 @@
char name[NAME_MAX];
snprintf(name, sizeof(name), "%s[%i].subset.%i", j->anonymous ? j->prog : j->label, j->p, MACH_PORT_INDEX(requestorport));
- if (!job_assumes(j, (jmr = jobmgr_new(j->mgr, requestorport, MACH_PORT_NULL, false, name, j->audit_session)) != NULL)) {
+ if (!job_assumes(j, (jmr = jobmgr_new(j->mgr, requestorport, MACH_PORT_NULL, false, name, true, j->audit_session)) != NULL)) {
if (unlikely(requestorport == MACH_PORT_NULL)) {
return BOOTSTRAP_NOT_PRIVILEGED;
}
@@ -8729,7 +8730,7 @@
SLIST_INIT(&s_curious_jobs);
LIST_INIT(&s_needing_sessions);
- launchd_assert((root_jobmgr = jobmgr_new(NULL, MACH_PORT_NULL, MACH_PORT_NULL, sflag, root_session_type, MACH_PORT_NULL)) != NULL);
+ launchd_assert((root_jobmgr = jobmgr_new(NULL, MACH_PORT_NULL, MACH_PORT_NULL, sflag, root_session_type, false, MACH_PORT_NULL)) != NULL);
uint32_t fflags = NOTE_ATTRIB | NOTE_LINK | NOTE_REVOKE | NOTE_EXTEND | NOTE_WRITE;
s_no_hang_fd = open("/dev/autofs_nowait", O_EVTONLY | O_NONBLOCK);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/launchd-changes/attachments/20090423/ceded292/attachment.html>
More information about the launchd-changes
mailing list