[launchd-changes] [23200] trunk/launchd/src/libvproc.c
source_changes at macosforge.org
source_changes at macosforge.org
Wed Apr 4 08:36:25 PDT 2007
Revision: 23200
http://trac.macosforge.org/projects/launchd/changeset/23200
Author: zarzycki at apple.com
Date: 2007-04-04 08:36:25 -0700 (Wed, 04 Apr 2007)
Log Message:
-----------
<rdar://problem/4335876> screen/nohup/sudo/su need to be taught (abstractly) about Mac OS X sessions (or else bootstrap_look_up() fails)
Modified Paths:
--------------
trunk/launchd/src/libvproc.c
Modified: trunk/launchd/src/libvproc.c
===================================================================
--- trunk/launchd/src/libvproc.c 2007-04-02 21:31:59 UTC (rev 23199)
+++ trunk/launchd/src/libvproc.c 2007-04-04 15:36:25 UTC (rev 23200)
@@ -38,6 +38,8 @@
#include "reboot2.h"
+static mach_port_t get_root_bootstrap_port(void);
+
kern_return_t
_vproc_grab_subset(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright,
name_array_t *service_names, mach_msg_type_number_t *service_namesCnt,
@@ -52,14 +54,23 @@
{
kern_return_t kr = 1;
mach_port_t puc = 0, which_port = bootstrap_port;
+ bool is_bkgd = (strcmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0);
- if (target_user && vproc_mig_lookup_per_user_context(bootstrap_port, target_user, &puc) == 0) {
+ if (target_user && vproc_mig_lookup_per_user_context(get_root_bootstrap_port(), target_user, &puc) == 0) {
which_port = puc;
}
- kr = vproc_mig_move_subset(which_port, bootstrap_port, session_type);
+ if (is_bkgd) {
+ kr = 0;
+ } else {
+ kr = vproc_mig_move_subset(which_port, bootstrap_port, session_type);
+ }
- if (puc) {
+ if (puc && is_bkgd) {
+ task_set_bootstrap_port(mach_task_self(), puc);
+ mach_port_deallocate(mach_task_self(), bootstrap_port);
+ bootstrap_port = puc;
+ } else if (puc) {
mach_port_deallocate(mach_task_self(), puc);
}
@@ -251,8 +262,8 @@
return (vproc_err_t)vproc_swap_integer;
}
-void *
-reboot2(uint64_t flags)
+mach_port_t
+get_root_bootstrap_port(void)
{
mach_port_t parent_port = 0;
mach_port_t previous_port = 0;
@@ -266,16 +277,21 @@
}
if (bootstrap_parent(previous_port, &parent_port) != 0) {
- goto out_bad;
+ return MACH_PORT_NULL;
}
} while (parent_port != previous_port);
- if (vproc_mig_reboot2(parent_port, flags) == 0) {
+ return parent_port;
+}
+
+void *
+reboot2(uint64_t flags)
+{
+ if (vproc_mig_reboot2(get_root_bootstrap_port(), flags) == 0) {
return NULL;
}
-out_bad:
return reboot2;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070404/ecf7fbb2/attachment.html
More information about the launchd-changes
mailing list