[launchd-changes] [23125] trunk/launchd/src/launchd_core_logic.c
source_changes at macosforge.org
source_changes at macosforge.org
Sat Mar 3 15:42:02 PST 2007
Revision: 23125
http://trac.macosforge.org/projects/launchd/changeset/23125
Author: zarzycki at apple.com
Date: 2007-03-03 15:42:02 -0800 (Sat, 03 Mar 2007)
Log Message:
-----------
<rdar://problem/4369850> launchd should have a per-user bootstrap context ("background session")
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-03-03 23:09:49 UTC (rev 23124)
+++ trunk/launchd/src/launchd_core_logic.c 2007-03-03 23:42:02 UTC (rev 23125)
@@ -272,7 +272,7 @@
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, removal_pending:1,
- wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1;
+ wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1, weird_per_user_bootstrap:1;
char label[0];
};
@@ -1649,6 +1649,17 @@
job_log(j, LOG_DEBUG, "Reaping");
+ if (j->weird_per_user_bootstrap) {
+ mach_msg_size_t mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem);
+
+ if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) {
+ mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize;
+ }
+
+ job_assumes(j, runtime_add_mport(j->mgr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS);
+ j->weird_per_user_bootstrap = false;
+ }
+
if (j->log_redirect_fd && (!j->wait4pipe_eof || j->mgr->shutting_down)) {
job_assumes(j, close(j->log_redirect_fd) != -1);
j->log_redirect_fd = 0;
@@ -1985,7 +1996,7 @@
time(&j->start_time);
- switch (c = runtime_fork(j->mgr->jm_port)) {
+ switch (c = runtime_fork(j->weird_per_user_bootstrap ? j->j_port : j->mgr->jm_port)) {
case -1:
job_log_error(j, LOG_ERR, "fork() failed, will try again in one second");
job_assumes(j, close(execspair[0]) == 0);
@@ -3465,10 +3476,6 @@
mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize;
}
- if (!jobmgr_assumes(jmr, runtime_add_mport(jmr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS)) {
- goto out_bad;
- }
-
jobmgr_assumes(jmr, (jmr->anonj = jobmgr_get_anonymous(jmr)) != NULL);
bootstrapper = job_new(jmr, "com.apple.launchctld", NULL, bootstrap_tool);
@@ -3477,6 +3484,16 @@
jobmgr_assumes(jmr, kevent_mod(SIGTERM, EVFILT_SIGNAL, EV_ADD, 0, 0, jmr) != -1);
}
+ if (!jm && getuid() != 0) {
+ /* per-user bootstrap context is messy */
+ bootstrapper->weird_per_user_bootstrap = true;
+ jobmgr_assumes(jmr, job_setup_machport(bootstrapper));
+ } else {
+ if (!jobmgr_assumes(jmr, runtime_add_mport(jmr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS)) {
+ goto out_bad;
+ }
+ }
+
jobmgr_log(jmr, LOG_DEBUG, "Created job manager%s%s", jm ? " with parent: " : ".", jm ? jm->name : "");
if (!jm && jobmgr_assumes(jmr, bootstrapper != NULL)) {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070303/83c0dc73/attachment.html
More information about the launchd-changes
mailing list