Revision: 23124 http://trac.macosforge.org/projects/launchd/changeset/23124 Author: zarzycki@apple.com Date: 2007-03-03 15:09:49 -0800 (Sat, 03 Mar 2007) Log Message: ----------- Transform jobmgr_fork() to runtime_fork(). Someday, I'll create runtime_spawn() that wraps and extends posix_spawn(). Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/launchd_runtime.h Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-02 23:46:29 UTC (rev 23123) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-03 23:09:49 UTC (rev 23124) @@ -221,7 +221,6 @@ static job_t job_mig_intran2(jobmgr_t jm, mach_port_t p); static void job_export_all2(jobmgr_t jm, launch_data_t where); static void jobmgr_callback(void *obj, struct kevent *kev); -static pid_t jobmgr_fork(jobmgr_t jm); static void jobmgr_setup_env_from_other_jobs(jobmgr_t jm); static struct machservice *jobmgr_lookup_service(jobmgr_t jm, const char *name, bool check_parent, pid_t target_pid); static void jobmgr_logv(jobmgr_t jm, int pri, int err, const char *msg, va_list ap) __attribute__((format(printf, 4, 0))); @@ -1986,7 +1985,7 @@ time(&j->start_time); - switch (c = jobmgr_fork(j->mgr)) { + switch (c = runtime_fork(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); @@ -3088,29 +3087,6 @@ return false; } -pid_t -jobmgr_fork(jobmgr_t jm) -{ - mach_port_t p = jm->jm_port; - pid_t r = -1; - int saved_errno; - - jobmgr_assumes(jm, launchd_mport_make_send(p) == KERN_SUCCESS); - jobmgr_assumes(jm, launchd_set_bport(p) == KERN_SUCCESS); - jobmgr_assumes(jm, launchd_mport_deallocate(p) == KERN_SUCCESS); - - r = fork(); - - saved_errno = errno; - - if (r != 0) { - jobmgr_assumes(jm, launchd_set_bport(MACH_PORT_NULL) == KERN_SUCCESS); - } - - errno = saved_errno; - return r; -} - void machservice_watch(job_t j, struct machservice *ms) { Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2007-03-02 23:46:29 UTC (rev 23123) +++ trunk/launchd/src/launchd_runtime.c 2007-03-03 23:09:49 UTC (rev 23124) @@ -553,6 +553,30 @@ return errno; } +pid_t +runtime_fork(mach_port_t bsport) +{ + pid_t r = -1; + int saved_errno; + + launchd_assumes(launchd_mport_make_send(bsport) == KERN_SUCCESS); + launchd_assumes(launchd_set_bport(bsport) == KERN_SUCCESS); + launchd_assumes(launchd_mport_deallocate(bsport) == KERN_SUCCESS); + + r = fork(); + + saved_errno = errno; + + if (r != 0) { + launchd_assumes(launchd_set_bport(MACH_PORT_NULL) == KERN_SUCCESS); + } + + errno = saved_errno; + + return r; +} + + void runtime_set_timeout(timeout_callback to_cb, mach_msg_timeout_t to) { Modified: trunk/launchd/src/launchd_runtime.h =================================================================== --- trunk/launchd/src/launchd_runtime.h 2007-03-02 23:46:29 UTC (rev 23123) +++ trunk/launchd/src/launchd_runtime.h 2007-03-03 23:09:49 UTC (rev 23124) @@ -71,6 +71,8 @@ int kevent_mod(uintptr_t ident, short filter, u_short flags, u_int fflags, intptr_t data, void *udata); +pid_t runtime_fork(mach_port_t bsport); + void runtime_openlog(const char *ident, int logopt, int facility); void runtime_closelog(void);
participants (1)
-
source_changes@macosforge.org