[launchd-changes] [23699] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Mon Aug 25 14:11:07 PDT 2008
Revision: 23699
http://trac.macosforge.org/projects/launchd/changeset/23699
Author: dsorresso at apple.com
Date: 2008-08-25 14:11:07 -0700 (Mon, 25 Aug 2008)
Log Message:
-----------
Backing out change for rdar://problem/6003804, which caused rdar://problem/6173994. Will re-integrate once rdar://problem/6006324 is fixed.
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 23:01:23 UTC (rev 23698)
+++ trunk/launchd/src/launchd_internal.defs 2008-08-25 21:11:07 UTC (rev 23699)
@@ -28,3 +28,6 @@
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 23:01:23 UTC (rev 23698)
+++ trunk/launchd/src/launchd_runtime.c 2008-08-25 21:11:07 UTC (rev 23699)
@@ -86,9 +86,9 @@
static int bulk_kev_cnt;
static pthread_t kqueue_demand_thread;
+static pthread_t demand_thread;
-static void mportset_callback(void);
-static kq_callback kqmportset_callback = (kq_callback)mportset_callback;
+static void *mport_demand_loop(void *arg);
static void *kqueue_demand_loop(void *arg);
static void log_kevent_struct(int level, struct kevent *kev_base, int indx);
@@ -155,8 +155,6 @@
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);
@@ -174,6 +172,12 @@
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);
}
@@ -188,6 +192,25 @@
}
}
+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)
{
@@ -508,8 +531,8 @@
indx, kev->udata, kev->data, ident_buf, filter_str, flags_buf, fflags_buf);
}
-void
-mportset_callback(void)
+kern_return_t
+x_handle_mport(mach_port_t junk __attribute__((unused)))
{
mach_port_name_array_t members;
mach_msg_type_number_t membersCnt;
@@ -519,7 +542,7 @@
unsigned int i;
if (!launchd_assumes((errno = mach_port_get_set_status(mach_task_self(), demand_port_set, &members, &membersCnt)) == KERN_SUCCESS)) {
- return;
+ return 1;
}
for (i = 0; i < membersCnt; i++) {
@@ -547,6 +570,8 @@
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/20080825/39c5a2f5/attachment.html
More information about the launchd-changes
mailing list