[launchd-changes] [23696] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Fri Aug 22 15:48:58 PDT 2008
Revision: 23696
http://trac.macosforge.org/projects/launchd/changeset/23696
Author: dsorresso at apple.com
Date: 2008-08-22 15:48:58 -0700 (Fri, 22 Aug 2008)
Log Message:
-----------
Merging in changes for rdar://problem/6003804
Modified Paths:
--------------
trunk/launchd/src/launchd_internal.defs
trunk/launchd/src/launchd_runtime.c
Modified: trunk/launchd/src/launchd_internal.defs
===================================================================
--- trunk/launchd/src/launchd_internal.defs 2008-08-22 22:42:13 UTC (rev 23695)
+++ trunk/launchd/src/launchd_internal.defs 2008-08-22 22:48:58 UTC (rev 23696)
@@ -28,6 +28,3 @@
routine handle_kqueue(
__port : mach_port_t;
__fd : integer_t);
-
-routine handle_mport(
- __port : mach_port_t);
Modified: trunk/launchd/src/launchd_runtime.c
===================================================================
--- trunk/launchd/src/launchd_runtime.c 2008-08-22 22:42:13 UTC (rev 23695)
+++ trunk/launchd/src/launchd_runtime.c 2008-08-22 22:48:58 UTC (rev 23696)
@@ -86,9 +86,9 @@
static int bulk_kev_cnt;
static pthread_t kqueue_demand_thread;
-static pthread_t demand_thread;
-static void *mport_demand_loop(void *arg);
+static void mportset_callback(void);
+static kq_callback kqmportset_callback = (kq_callback)mportset_callback;
static void *kqueue_demand_loop(void *arg);
static void log_kevent_struct(int level, struct kevent *kev_base, int indx);
@@ -155,6 +155,8 @@
launchd_assert((errno = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_PORT_SET, &demand_port_set)) == KERN_SUCCESS);
launchd_assert((errno = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_PORT_SET, &ipc_port_set)) == KERN_SUCCESS);
+ launchd_assert(kevent_mod(demand_port_set, EVFILT_MACHPORT, EV_ADD, 0, 0, &kqmportset_callback) != -1);
+
launchd_assert(launchd_mport_create_recv(&launchd_internal_port) == KERN_SUCCESS);
launchd_assert(launchd_mport_make_send(launchd_internal_port) == KERN_SUCCESS);
@@ -172,12 +174,6 @@
launchd_assert(pthread_create(&kqueue_demand_thread, &attr, kqueue_demand_loop, NULL) == 0);
pthread_attr_destroy(&attr);
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN);
- launchd_assert(pthread_create(&demand_thread, &attr, mport_demand_loop, NULL) == 0);
- pthread_attr_destroy(&attr);
-
launchd_assumes(sysctlbyname("vfs.generic.noremotehang", NULL, NULL, &p, sizeof(p)) != -1);
}
@@ -192,25 +188,6 @@
}
}
-void *
-mport_demand_loop(void *arg __attribute__((unused)))
-{
- mach_msg_empty_rcv_t dummy;
- kern_return_t kr;
-
- for (;;) {
- kr = mach_msg(&dummy.header, MACH_RCV_MSG|MACH_RCV_LARGE, 0, 0, demand_port_set, 0, MACH_PORT_NULL);
- if (unlikely(kr == MACH_RCV_PORT_CHANGED)) {
- break;
- } else if (!launchd_assumes(kr == MACH_RCV_TOO_LARGE)) {
- continue;
- }
- launchd_assumes(handle_mport(launchd_internal_port) == 0);
- }
-
- return NULL;
-}
-
INTERNAL_ABI const char *
proc_flags_to_C_names(unsigned int flags)
{
@@ -531,8 +508,8 @@
indx, kev->udata, kev->data, ident_buf, filter_str, flags_buf, fflags_buf);
}
-kern_return_t
-x_handle_mport(mach_port_t junk __attribute__((unused)))
+void
+mportset_callback(void)
{
mach_port_name_array_t members;
mach_msg_type_number_t membersCnt;
@@ -542,7 +519,7 @@
unsigned int i;
if (!launchd_assumes((errno = mach_port_get_set_status(mach_task_self(), demand_port_set, &members, &membersCnt)) == KERN_SUCCESS)) {
- return 1;
+ return;
}
for (i = 0; i < membersCnt; i++) {
@@ -570,8 +547,6 @@
launchd_assumes(vm_deallocate(mach_task_self(), (vm_address_t)members,
(vm_size_t) membersCnt * sizeof(mach_port_name_t)) == KERN_SUCCESS);
-
- return 0;
}
void *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080822/518df963/attachment.html
More information about the launchd-changes
mailing list