[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