[launchd-changes] [23535] trunk/launchd/src

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 5 18:16:38 PST 2008


Revision: 23535
          http://trac.macosforge.org/projects/launchd/changeset/23535
Author:   zarzycki at apple.com
Date:     2008-03-05 18:16:37 -0800 (Wed, 05 Mar 2008)

Log Message:
-----------
<rdar://problem/5783944> Deprecate bootstrap_create_service() in favor of bootstrap_check_in()

Modified Paths:
--------------
    trunk/launchd/src/launchctl.c
    trunk/launchd/src/launchd_core_logic.c
    trunk/launchd/src/launchd_runtime.c
    trunk/launchd/src/libbootstrap.c
    trunk/launchd/src/libbootstrap_public.h
    trunk/launchd/src/libvproc_public.h
    trunk/launchd/src/protocol_job.defs

Modified: trunk/launchd/src/launchctl.c
===================================================================
--- trunk/launchd/src/launchctl.c	2008-03-04 21:50:35 UTC (rev 23534)
+++ trunk/launchd/src/launchctl.c	2008-03-06 02:16:37 UTC (rev 23535)
@@ -1794,9 +1794,9 @@
 			fprintf(stderr, "%s: bootstrap_create_server(): %d\n", getprogname(), kr);
 			continue;
 		}
-		if ((kr = bootstrap_create_service(msr, (char*)sn, &msv)) != KERN_SUCCESS) {
+		if ((kr = bootstrap_check_in(msr, (char*)sn, &msv)) != KERN_SUCCESS) {
 			fprintf(stderr, "%s: bootstrap_create_service(): %d\n", getprogname(), kr);
-			mach_port_destroy(mach_task_self(), msr);
+			mach_port_mod_refs(mach_task_self(), msv, MACH_PORT_RIGHT_RECEIVE, -1);
 			continue;
 		}
 		launch_data_dict_insert(oai, launch_data_new_machport(msr), MACHINIT_JOBKEY_SERVERPORT);

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2008-03-04 21:50:35 UTC (rev 23534)
+++ trunk/launchd/src/launchd_core_logic.c	2008-03-06 02:16:37 UTC (rev 23535)
@@ -425,7 +425,6 @@
 static job_t job_new_anonymous(jobmgr_t jm, pid_t anonpid) __attribute__((malloc, nonnull, warn_unused_result));
 static job_t job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv) __attribute__((malloc, nonnull(1,2), warn_unused_result));
 static job_t job_new_via_mach_init(job_t j, const char *cmd, uid_t uid, bool ond) __attribute__((malloc, nonnull, warn_unused_result));
-static const char *job_prog(job_t j);
 static void job_kill(job_t j);
 static void job_uncork_fork(job_t j);
 static void job_log_stdouterr(job_t j);
@@ -4133,18 +4132,6 @@
 }
 
 const char *
-job_prog(job_t j)
-{
-	if (j->prog) {
-		return j->prog;
-	} else if (likely(j->argv)) {
-		return j->argv[0];
-	} else {
-		return "";
-	}
-}
-
-const char *
 job_active(job_t j)
 {
 	struct machservice *ms;
@@ -5926,9 +5913,15 @@
 
 	ms = jobmgr_lookup_service(j->mgr, servicename, true, 0);
 
-	if (unlikely(ms == NULL)) {
-		job_log(j, LOG_DEBUG, "Check-in of Mach service failed. Unknown: %s", servicename);
-		return BOOTSTRAP_UNKNOWN_SERVICE;
+	if (ms == NULL) {
+		*serviceportp = MACH_PORT_NULL;
+		ms = machservice_new(j, servicename, serviceportp, false);
+
+		if (unlikely(ms == NULL)) {
+			return BOOTSTRAP_NO_MEMORY;
+		}
+
+		job_checkin(j);
 	}
 
 	if (unlikely((jo = machservice_job(ms)) != j)) {
@@ -6575,43 +6568,6 @@
 }
 
 kern_return_t
-job_mig_create_service(job_t j, name_t servicename, mach_port_t *serviceportp)
-{
-	struct machservice *ms;
-
-	if (!launchd_assumes(j != NULL)) {
-		return BOOTSTRAP_NO_MEMORY;
-	}
-
-	if (unlikely(job_prog(j)[0] == '\0')) {
-		job_log(j, LOG_ERR, "Mach service creation requires a target server: %s", servicename);
-		return BOOTSTRAP_NOT_PRIVILEGED;
-	}
-
-	if (unlikely(!j->legacy_mach_job)) {
-		job_log(j, LOG_ERR, "bootstrap_create_service() is only allowed against legacy Mach jobs: %s", servicename);
-		return BOOTSTRAP_NOT_PRIVILEGED;
-	}
-
-	ms = jobmgr_lookup_service(j->mgr, servicename, false, 0);
-	if (unlikely(ms)) {
-		job_log(j, LOG_DEBUG, "Mach service creation attempt for failed. Already exists: %s", servicename);
-		return BOOTSTRAP_NAME_IN_USE;
-	}
-
-	job_checkin(j);
-
-	*serviceportp = MACH_PORT_NULL;
-	ms = machservice_new(j, servicename, serviceportp, false);
-
-	if (!job_assumes(j, ms != NULL)) {
-		return BOOTSTRAP_NO_MEMORY;
-	}
-
-	return BOOTSTRAP_SUCCESS;
-}
-
-kern_return_t
 job_mig_embedded_wait(job_t j, name_t targetlabel, integer_t *waitstatus)
 {
 	job_t otherj;

Modified: trunk/launchd/src/launchd_runtime.c
===================================================================
--- trunk/launchd/src/launchd_runtime.c	2008-03-04 21:50:35 UTC (rev 23534)
+++ trunk/launchd/src/launchd_runtime.c	2008-03-06 02:16:37 UTC (rev 23535)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999-2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999-2008 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_APACHE_LICENSE_HEADER_START@
  * 

Modified: trunk/launchd/src/libbootstrap.c
===================================================================
--- trunk/launchd/src/libbootstrap.c	2008-03-04 21:50:35 UTC (rev 23534)
+++ trunk/launchd/src/libbootstrap.c	2008-03-06 02:16:37 UTC (rev 23535)
@@ -100,7 +100,17 @@
 kern_return_t
 bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp)
 {
-	return vproc_mig_create_service(bp, service_name, sp);
+	kern_return_t kr;
+
+	if ((kr = bootstrap_check_in(bp, service_name, sp))) {
+		return kr;
+	}
+
+	if ((kr = mach_port_mod_refs(mach_task_self(), *sp, MACH_PORT_RIGHT_RECEIVE, -1))) {
+		return kr;
+	}
+
+	return bootstrap_look_up(bp, service_name, sp);
 }
 
 kern_return_t
@@ -160,19 +170,22 @@
 kern_return_t
 bootstrap_status(mach_port_t bp, name_t service_name, bootstrap_status_t *service_active)
 {
+	kern_return_t kr;
 	mach_port_t p;
 
+	if ((kr = bootstrap_look_up(bp, service_name, &p))) {
+		return kr;
+	}
+
+	mach_port_deallocate(mach_task_self(), p);
+	*service_active = BOOTSTRAP_STATUS_ACTIVE;
+
 	if (bootstrap_check_in(bp, service_name, &p) == BOOTSTRAP_SUCCESS) {
 		mach_port_mod_refs(mach_task_self(), p, MACH_PORT_RIGHT_RECEIVE, -1);
 		*service_active = BOOTSTRAP_STATUS_ON_DEMAND;
-		return BOOTSTRAP_SUCCESS;
-	} else if (bootstrap_look_up(bp, service_name, &p) == BOOTSTRAP_SUCCESS) {
-		mach_port_deallocate(mach_task_self(), p);
-		*service_active = BOOTSTRAP_STATUS_ACTIVE;
-		return BOOTSTRAP_SUCCESS;
 	}
 
-	return BOOTSTRAP_UNKNOWN_SERVICE;
+	return BOOTSTRAP_SUCCESS;
 }
 
 kern_return_t

Modified: trunk/launchd/src/libbootstrap_public.h
===================================================================
--- trunk/launchd/src/libbootstrap_public.h	2008-03-04 21:50:35 UTC (rev 23534)
+++ trunk/launchd/src/libbootstrap_public.h	2008-03-06 02:16:37 UTC (rev 23535)
@@ -233,13 +233,16 @@
  *
  * This API is deprecated. Old scenarios and recommendations:
  *
- * 1) If the code was registering a well known name, please switch to launchd.
+ * 1) Code that used to call bootstrap_check_in() and then bootstrap_register()
+ *    can now always call bootstrap_check_in().
  *
- * 2) If the code was registering a dynamically generated string and passing
+ * 2) If the code was registering a well known name, please switch to launchd.
+ *
+ * 3) If the code was registering a dynamically generated string and passing
  *    the string to other applications, please rewrite the code to send a Mach
  *    send-right directly.
  *
- * 3) If the launchd job maintained an optional Mach service, please reserve
+ * 4) If the launchd job maintained an optional Mach service, please reserve
  *    the name with launchd and control the presense of the service through
  *    ownership of the Mach receive right like so.
  *
@@ -261,26 +264,27 @@
  *		Returns BOOTSTRAP_NAME_IN_USE, if service has already been
  *			register or checked-in.
  */
-kern_return_t bootstrap_register(
-		mach_port_t bp,
-		name_t service_name,
-		mach_port_t sp)
-		AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5;
+AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+kern_return_t
+bootstrap_register(mach_port_t bp, name_t service_name, mach_port_t sp);
 
 /*
  * bootstrap_create_service()
  *
- * Creates a service named "service_name" and returns send rights to that
+ * Creates a service named "service_name" and returns a send right to that
  * port in "service_port."  The port may later be checked in as if this
  * port were configured in the bootstrap configuration file.
  *
+ * This API is deprecated. Please call bootstrap_check_in() instead.
+ *
  * Errors:	Returns appropriate kernel errors on rpc failure.
  *		Returns BOOTSTRAP_SERVICE_ACTIVE, if service already exists.
  */
-kern_return_t bootstrap_create_service(
-		mach_port_t bp,
-		name_t service_name,
-		mach_port_t *sp);
+#ifdef AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_6
+AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_6
+#endif
+kern_return_t
+bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp);
 
 /*
  * bootstrap_check_in()

Modified: trunk/launchd/src/libvproc_public.h
===================================================================
--- trunk/launchd/src/libvproc_public.h	2008-03-04 21:50:35 UTC (rev 23534)
+++ trunk/launchd/src/libvproc_public.h	2008-03-06 02:16:37 UTC (rev 23535)
@@ -94,7 +94,7 @@
 /*!
  * @function vproc_transaction_complete
  *
- * @param
+ * @param	handle
  * The handle previously created with vproc_transaction_prepare().
  *
  * @abstract
@@ -130,7 +130,7 @@
 /*!
  * @function vproc_standby_complete
  *
- * @param
+ * @param	handle
  * The handle previously created with vproc_standby_prepare().
  *
  * @abstract

Modified: trunk/launchd/src/protocol_job.defs
===================================================================
--- trunk/launchd/src/protocol_job.defs	2008-03-04 21:50:35 UTC (rev 23534)
+++ trunk/launchd/src/protocol_job.defs	2008-03-06 02:16:37 UTC (rev 23535)
@@ -94,10 +94,7 @@
 		__requestor_port: mach_port_t;
 	out	__subset_port	: mach_port_make_send_t);
 
-routine create_service(
-		__bs_port	: job_t;
-		__service_name	: name_t;
-	out	__service_port	: mach_port_t);
+skip;	/* create_service prior to 10.6 */
 
 routine take_subset(
 		__bs_port	: job_t;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080305/28e1af55/attachment-0001.html 


More information about the launchd-changes mailing list