[launchd-changes] [23539] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Thu Mar 6 11:00:19 PST 2008
Revision: 23539
http://trac.macosforge.org/projects/launchd/changeset/23539
Author: zarzycki at apple.com
Date: 2008-03-06 11:00:19 -0800 (Thu, 06 Mar 2008)
Log Message:
-----------
Refinements on:
<rdar://problem/5783944> Deprecate bootstrap_create_service() in favor of bootstrap_check_in()
Modified Paths:
--------------
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/libbootstrap.c
trunk/launchd/src/libbootstrap_private.h
trunk/launchd/src/protocol_job.defs
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2008-03-06 18:46:35 UTC (rev 23538)
+++ trunk/launchd/src/launchd_core_logic.c 2008-03-06 19:00:19 UTC (rev 23539)
@@ -140,8 +140,9 @@
job_t job;
unsigned int gen_num;
mach_port_name_t port;
- unsigned int isActive:1, reset:1, recv:1, hide:1, kUNCServer:1,
- per_user_hack:1, debug_on_close:1, per_pid:1, special_port_num:24;
+ unsigned int isActive:1, reset:1, recv:1, hide:1,
+ kUNCServer:1, per_user_hack:1, debug_on_close:1, per_pid:1,
+ delete_on_destruction:1, special_port_num:23;
const char name[0];
};
@@ -4888,6 +4889,7 @@
job_ack_port_destruction(mach_port_t p)
{
struct machservice *ms;
+ job_t j;
LIST_FOREACH(ms, &port_hash[HASH_PORT(p)], port_hash_sle) {
if (ms->recv && (ms->port == p)) {
@@ -4895,18 +4897,23 @@
}
}
- if (!ms) {
+ if (!jobmgr_assumes(root_jobmgr, ms != NULL)) {
return false;
}
+ j = ms->job;
+
+ job_log(j, LOG_DEBUG, "Receive right returned to us: %s", ms->name);
+
ms->isActive = false;
- if (ms->reset) {
- machservice_resetport(ms->job, ms);
+ if (ms->delete_on_destruction) {
+ machservice_delete(j, ms, false);
+ } else if (ms->reset) {
+ machservice_resetport(j, ms);
}
- job_log(ms->job, LOG_DEBUG, "Receive right returned to us: %s", ms->name);
- job_dispatch(ms->job, false);
+ job_dispatch(j, false);
root_jobmgr = jobmgr_do_garbage_collection(root_jobmgr);
@@ -5901,26 +5908,27 @@
}
kern_return_t
-job_mig_check_in(job_t j, name_t servicename, mach_port_t *serviceportp)
+job_mig_check_in2(job_t j, name_t servicename, mach_port_t *serviceportp, uint64_t flags)
{
+ bool per_pid_service = flags & BOOTSTRAP_PER_PID_SERVICE;
+ struct ldcred *ldc = runtime_get_caller_creds();
struct machservice *ms;
- struct ldcred *ldc = runtime_get_caller_creds();
job_t jo;
if (!launchd_assumes(j != NULL)) {
return BOOTSTRAP_NO_MEMORY;
}
- ms = jobmgr_lookup_service(j->mgr, servicename, true, 0);
+ ms = jobmgr_lookup_service(j->mgr, servicename, false, per_pid_service ? ldc->pid : 0);
if (ms == NULL) {
*serviceportp = MACH_PORT_NULL;
- ms = machservice_new(j, servicename, serviceportp, false);
- if (unlikely(ms == NULL)) {
+ if (unlikely((ms = machservice_new(j, servicename, serviceportp, per_pid_service)) == NULL)) {
return BOOTSTRAP_NO_MEMORY;
}
+ ms->delete_on_destruction = true; /* parity with bootstrap_register() */
job_checkin(j);
if (!(j->anonymous || j->legacy_LS_job || j->legacy_mach_job)) {
Modified: trunk/launchd/src/libbootstrap.c
===================================================================
--- trunk/launchd/src/libbootstrap.c 2008-03-06 18:46:35 UTC (rev 23538)
+++ trunk/launchd/src/libbootstrap.c 2008-03-06 19:00:19 UTC (rev 23539)
@@ -116,10 +116,16 @@
kern_return_t
bootstrap_check_in(mach_port_t bp, name_t service_name, mach_port_t *sp)
{
- return vproc_mig_check_in(bp, service_name, sp);
+ return vproc_mig_check_in2(bp, service_name, sp, 0);
}
kern_return_t
+bootstrap_check_in2(mach_port_t bp, name_t service_name, mach_port_t *sp, uint64_t flags)
+{
+ return vproc_mig_check_in2(bp, service_name, sp, flags);
+}
+
+kern_return_t
bootstrap_look_up_per_user(mach_port_t bp, name_t service_name, uid_t target_user, mach_port_t *sp)
{
struct stat sb;
Modified: trunk/launchd/src/libbootstrap_private.h
===================================================================
--- trunk/launchd/src/libbootstrap_private.h 2008-03-06 18:46:35 UTC (rev 23538)
+++ trunk/launchd/src/libbootstrap_private.h 2008-03-06 19:00:19 UTC (rev 23539)
@@ -35,6 +35,8 @@
kern_return_t bootstrap_look_up2(mach_port_t bp, name_t service_name, mach_port_t *sp, pid_t target_pid, uint64_t flags);
+kern_return_t bootstrap_check_in2(mach_port_t bp, name_t service_name, mach_port_t *sp, uint64_t flags);
+
kern_return_t bootstrap_look_up_per_user(mach_port_t bp, name_t service_name, uid_t target_user, mach_port_t *sp);
kern_return_t bootstrap_set_policy(mach_port_t bp, pid_t target_pid, uint64_t flags, const char *target_service);
Modified: trunk/launchd/src/protocol_job.defs
===================================================================
--- trunk/launchd/src/protocol_job.defs 2008-03-06 18:46:35 UTC (rev 23538)
+++ trunk/launchd/src/protocol_job.defs 2008-03-06 19:00:19 UTC (rev 23539)
@@ -50,10 +50,11 @@
__bs_port : job_t;
__flags : uint64_t);
-routine check_in(
- __bs_port : job_t;
- __service_name : name_t;
- out __service_port : mach_port_move_receive_t);
+routine check_in2(
+ __bs_port : job_t;
+ __service_name : name_t;
+ out __service_port : mach_port_move_receive_t;
+ __flags : uint64_t);
routine register2(
__bs_port : job_t;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080306/d369670d/attachment-0001.html
More information about the launchd-changes
mailing list