[launchd-changes] [23928] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Thu Jul 2 16:29:49 PDT 2009
Revision: 23928
http://trac.macosforge.org/projects/launchd/changeset/23928
Author: dsorresso at apple.com
Date: 2009-07-02 16:29:48 -0700 (Thu, 02 Jul 2009)
Log Message:
-----------
<rdar://problem/6991074> Couldn't launch applications, -600 error -- coreservicesd appeared to be wedged
Modified Paths:
--------------
trunk/launchd/src/StartupItems.c
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/libvproc.c
trunk/launchd/src/protocol_job_reply.defs
trunk/launchd/src/protocol_vproc.defs
Modified: trunk/launchd/src/StartupItems.c
===================================================================
--- trunk/launchd/src/StartupItems.c 2009-06-18 22:47:09 UTC (rev 23927)
+++ trunk/launchd/src/StartupItems.c 2009-07-02 23:29:48 UTC (rev 23928)
@@ -294,7 +294,7 @@
*
* Just in case...
*/
- mkdir(aPath, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
+ mkdir(aPath, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
if (!StartupItemSecurityCheck(aPath))
continue;
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2009-06-18 22:47:09 UTC (rev 23927)
+++ trunk/launchd/src/launchd_core_logic.c 2009-07-02 23:29:48 UTC (rev 23928)
@@ -156,9 +156,10 @@
struct waiting_for_exit {
LIST_ENTRY(waiting_for_exit) sle;
mach_port_t rp;
+ bool legacy;
};
-static bool waiting4exit_new(job_t j, mach_port_t rp);
+static bool waiting4exit_new(job_t j, mach_port_t rp, bool legacy);
static void waiting4exit_delete(job_t j, struct waiting_for_exit *w4e);
struct machservice {
@@ -8581,17 +8582,25 @@
kern_return_t
job_mig_wait(job_t j, mach_port_t srp, integer_t *waitstatus)
{
+#if 0
if (!launchd_assumes(j != NULL)) {
return BOOTSTRAP_NO_MEMORY;
}
-#if 0
+ return job_handle_mpm_wait(j, srp, waitstatus);
+#else
+ if( false ) {
+ /* To make the compiler happy. */
+ job_handle_mpm_wait(NULL, MACH_PORT_NULL, NULL);
+ }
struct ldcred *ldc = runtime_get_caller_creds();
+ job_t calling_j = job_mig_intran2(j->mgr, MACH_PORT_NULL, ldc->pid);
+
+ return job_mig_wait2(calling_j, j, srp, waitstatus, true);
#endif
- return job_handle_mpm_wait(j, srp, waitstatus);
}
kern_return_t
-job_mig_wait2(job_t j, job_t target_j, mach_port_t srp, integer_t *status __attribute__((unused)))
+job_mig_wait2(job_t j, job_t target_j, mach_port_t srp, integer_t *status, boolean_t legacy)
{
if( !launchd_assumes(j != NULL) ) {
return BOOTSTRAP_NO_MEMORY;
@@ -8599,12 +8608,16 @@
if( !launchd_assumes(target_j != NULL) ) {
return BOOTSTRAP_NO_MEMORY;
}
+ if( !launchd_assumes(status != NULL) ) {
+ return BOOTSTRAP_NO_MEMORY;
+ }
if( target_j->p == 0 ) {
+ *status = target_j->last_exit_status;
return BOOTSTRAP_SUCCESS;
}
- if( !job_assumes(j, waiting4exit_new(target_j, srp) == true) ) {
+ if( !job_assumes(j, waiting4exit_new(target_j, srp, legacy) == true) ) {
return BOOTSTRAP_NO_MEMORY;
}
@@ -8792,7 +8805,7 @@
}
bool
-waiting4exit_new(job_t j, mach_port_t rp)
+waiting4exit_new(job_t j, mach_port_t rp, bool legacy)
{
struct waiting_for_exit *w4e = NULL;
if( !job_assumes(j, (w4e = malloc(sizeof(struct waiting_for_exit))) != NULL) ) {
@@ -8800,6 +8813,7 @@
}
w4e->rp = rp;
+ w4e->legacy = legacy;
LIST_INSERT_HEAD(&j->exit_watchers, w4e, sle);
return true;
@@ -8808,7 +8822,12 @@
void
waiting4exit_delete(job_t j, struct waiting_for_exit *w4e)
{
- job_assumes(j, job_mig_wait2_reply(w4e->rp, KERN_SUCCESS, j->last_exit_status) == KERN_SUCCESS);
+ if( !w4e->legacy ) {
+ job_assumes(j, job_mig_wait2_reply(w4e->rp, KERN_SUCCESS, j->last_exit_status, false) == KERN_SUCCESS);
+ } else {
+ job_assumes(j, job_mig_wait_reply(w4e->rp, KERN_SUCCESS, j->last_exit_status) == KERN_SUCCESS);
+ }
+
LIST_REMOVE(w4e, sle);
free(w4e);
Modified: trunk/launchd/src/libvproc.c
===================================================================
--- trunk/launchd/src/libvproc.c 2009-06-18 22:47:09 UTC (rev 23927)
+++ trunk/launchd/src/libvproc.c 2009-07-02 23:29:48 UTC (rev 23928)
@@ -704,7 +704,7 @@
}
kern_return_t
-mpm_wait(mach_port_t ajob __attribute__((unused)), int *wstatus)
+mpm_wait(mach_port_t ajob, int *wstatus)
{
return vproc_mig_wait(ajob, wstatus);
}
@@ -863,7 +863,7 @@
vproc_t pu_vp = vprocmgr_lookup_vproc(peruser_label);
if( pu_vp ) {
int status = 0;
- kr = vproc_mig_wait2(bootstrap_port, pu_vp->j_port, &status);
+ kr = vproc_mig_wait2(bootstrap_port, pu_vp->j_port, &status, false);
vproc_release(pu_vp);
}
break;
Modified: trunk/launchd/src/protocol_job_reply.defs
===================================================================
--- trunk/launchd/src/protocol_job_reply.defs 2009-06-18 22:47:09 UTC (rev 23927)
+++ trunk/launchd/src/protocol_job_reply.defs 2009-07-02 23:29:48 UTC (rev 23928)
@@ -100,4 +100,5 @@
simpleroutine job_mig_wait2_reply(
__r_port : mach_port_move_send_once_t;
__result : kern_return_t, RetCode;
- __waitval : integer_t);
+ __waitval : integer_t;
+ __legacy : boolean_t);
Modified: trunk/launchd/src/protocol_vproc.defs
===================================================================
--- trunk/launchd/src/protocol_vproc.defs 2009-06-18 22:47:09 UTC (rev 23927)
+++ trunk/launchd/src/protocol_vproc.defs 2009-07-02 23:29:48 UTC (rev 23928)
@@ -225,4 +225,5 @@
__bs_port : job_t;
__target_port : job_t;
sreplyport __rport : mach_port_make_send_once_t;
-out __waitval : integer_t);
+out __waitval : integer_t;
+ __legacy : boolean_t);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/launchd-changes/attachments/20090702/d7c0dc0d/attachment.html>
More information about the launchd-changes
mailing list