[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