[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