summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2006-08-01 15:30:56 +0000
committerjhb <jhb@FreeBSD.org>2006-08-01 15:30:56 +0000
commit9cbcfd1ffff1d697a7ccc47fa013396d2f7154e5 (patch)
treec25eeb7628f528477bf0f46ab58c31d1c50c4811
parent2c6524682bca711c5d252fea1d35c6718517ea9f (diff)
downloadFreeBSD-src-9cbcfd1ffff1d697a7ccc47fa013396d2f7154e5.zip
FreeBSD-src-9cbcfd1ffff1d697a7ccc47fa013396d2f7154e5.tar.gz
Don't lock each of the processes while looking for a pid. The allproc and
proctree locks that we already hold provide sufficient protection.
-rw-r--r--sys/kern/kern_fork.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index 3b2de92..66361b2 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -377,17 +377,14 @@ retry:
p2 = LIST_FIRST(&allproc);
again:
for (; p2 != NULL; p2 = LIST_NEXT(p2, p_list)) {
- PROC_LOCK(p2);
while (p2->p_pid == trypid ||
(p2->p_pgrp != NULL &&
(p2->p_pgrp->pg_id == trypid ||
(p2->p_session != NULL &&
p2->p_session->s_sid == trypid)))) {
trypid++;
- if (trypid >= pidchecked) {
- PROC_UNLOCK(p2);
+ if (trypid >= pidchecked)
goto retry;
- }
}
if (p2->p_pid > trypid && pidchecked > p2->p_pid)
pidchecked = p2->p_pid;
@@ -400,7 +397,6 @@ again:
pidchecked > p2->p_session->s_sid)
pidchecked = p2->p_session->s_sid;
}
- PROC_UNLOCK(p2);
}
if (!doingzomb) {
doingzomb = 1;
OpenPOWER on IntegriCloud