[launchd-changes] [23206] trunk/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Thu Apr 5 11:45:08 PDT 2007


Revision: 23206
          http://trac.macosforge.org/projects/launchd/changeset/23206
Author:   zarzycki at apple.com
Date:     2007-04-05 11:45:08 -0700 (Thu, 05 Apr 2007)

Log Message:
-----------
Consolidate PID lookups within a given jobmgr_t.

Modified Paths:
--------------
    trunk/launchd/src/launchd_core_logic.c

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2007-04-05 00:17:39 UTC (rev 23205)
+++ trunk/launchd/src/launchd_core_logic.c	2007-04-05 18:45:08 UTC (rev 23206)
@@ -239,6 +239,7 @@
 static void jobmgr_log_stray_children(jobmgr_t jm);
 static void jobmgr_remove(jobmgr_t jm);
 static void jobmgr_dispatch_all(jobmgr_t jm, bool newmounthack);
+static job_t jobmgr_find_by_pid(jobmgr_t jm, pid_t p);
 static job_t job_mig_intran2(jobmgr_t jm, mach_port_t p);
 static void job_export_all2(jobmgr_t jm, launch_data_t where);
 static void jobmgr_callback(void *obj, struct kevent *kev);
@@ -1601,26 +1602,33 @@
 	return NULL;
 }
 
+job_t
+jobmgr_find_by_pid(jobmgr_t jm, pid_t p)
+{
+	job_t ji = NULL;
+
+	LIST_FOREACH(ji, &jm->active_jobs[ACTIVE_JOB_HASH(p)], pid_hash_sle) {
+		if (ji->p == p) {
+			break;
+		}
+	}
+
+	return ji;
+}
+
 job_t 
 job_mig_intran2(jobmgr_t jm, mach_port_t p)
 {
+	struct ldcred ldc;
+	jobmgr_t jmi;
 	job_t ji;
-	jobmgr_t jmi;
 
 	if (jm->jm_port == p) {
-		struct ldcred ldc;
-		pid_t hashp;
-
 		runtime_get_caller_creds(&ldc);
 
-		hashp = ACTIVE_JOB_HASH(ldc.pid);
+		ji = jobmgr_find_by_pid(jm, ldc.pid);
 
-		LIST_FOREACH(ji, &jm->active_jobs[hashp], pid_hash_sle) {
-			if (ji->p == ldc.pid) {
-				return ji;
-			}
-		}
-		return job_new_anonymous(jm, ldc.pid);
+		return ji ? ji : job_new_anonymous(jm, ldc.pid);
 	}
 
 	SLIST_FOREACH(jmi, &jm->submgrs, sle) {
@@ -1986,22 +1994,15 @@
 jobmgr_reap_bulk(jobmgr_t jm, struct kevent *kev)
 {
 	jobmgr_t jmi;
-	job_t ji;
+	job_t j;
 
 	SLIST_FOREACH(jmi, &jm->submgrs, sle) {
 		jobmgr_reap_bulk(jmi, kev);
 	}
 
-	LIST_FOREACH(ji, &jm->active_jobs[ACTIVE_JOB_HASH(kev->ident)], pid_hash_sle) {
-		if (ji->p != (pid_t)kev->ident) {
-			continue;
-		}
-		
-		kev->udata = ji;
-		job_callback(ji, kev);
-
-		/* A given PID exists only once per jobmgr_t */
-		break;
+	if ((j = jobmgr_find_by_pid(jm, kev->ident))) {
+		kev->udata = j;
+		job_callback(j, kev);
 	}
 }
 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070405/f3114ac6/attachment.html


More information about the launchd-changes mailing list