[23907] trunk/launchd/src/launchd_core_logic.c
Revision: 23907 http://trac.macosforge.org/projects/launchd/changeset/23907 Author: dsorresso@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);
participants (1)
-
source_changes@macosforge.org