summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exit.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-02-09 16:43:18 +0000
committerjhb <jhb@FreeBSD.org>2001-02-09 16:43:18 +0000
commitfc07dbfd4f24f273b1dac84d1ebca3a534e821bc (patch)
tree9fe7a3c9d4ee91010827045bd463e43c8c0c79a0 /sys/kern/kern_exit.c
parentbd959765721d23722c72ba9fddc4b0a6db6327b9 (diff)
downloadFreeBSD-src-fc07dbfd4f24f273b1dac84d1ebca3a534e821bc.zip
FreeBSD-src-fc07dbfd4f24f273b1dac84d1ebca3a534e821bc.tar.gz
Release the proc lock around crfree() and uifree() in wait1(). It leads to
a lock order violation, and since p is already a zombie at this point, I'm not sure that we even need all the locking currently in wait1().
Diffstat (limited to 'sys/kern/kern_exit.c')
-rw-r--r--sys/kern/kern_exit.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index 71e6288..24a4753 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -521,8 +521,10 @@ loop:
*/
PROC_LOCK(p);
if (--p->p_cred->p_refcnt == 0) {
+ PROC_UNLOCK(p);
crfree(p->p_ucred);
uifree(p->p_cred->p_uidinfo);
+ PROC_LOCK(p);
FREE(p->p_cred, M_SUBPROC);
p->p_cred = NULL;
}
OpenPOWER on IntegriCloud