[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