summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exit.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-03-13 22:00:46 +0000
committerkib <kib@FreeBSD.org>2012-03-13 22:00:46 +0000
commit6e85340add3ff3bca6ff2fab3cec4f54fb2426e0 (patch)
treee7dd4ad4a81d5d26fc70479264f88bbba3c4ee3b /sys/kern/kern_exit.c
parent5e42a47a6830fc5f68aba2e93ac2c686d544c4c4 (diff)
downloadFreeBSD-src-6e85340add3ff3bca6ff2fab3cec4f54fb2426e0.zip
FreeBSD-src-6e85340add3ff3bca6ff2fab3cec4f54fb2426e0.tar.gz
Lock the process around manipulations with p_flag.
Reported and reviewed by: jh MFC after: 3 days
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 4795779..6c4f3d8 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -738,10 +738,12 @@ proc_reap(struct thread *td, struct proc *p, int *status, int options,
LIST_REMOVE(p, p_list); /* off zombproc */
sx_xunlock(&allproc_lock);
LIST_REMOVE(p, p_sibling);
+ PROC_LOCK(p);
if (p->p_flag & P_ORPHAN) {
LIST_REMOVE(p, p_orphan);
p->p_flag &= ~P_ORPHAN;
}
+ PROC_UNLOCK(p);
leavepgrp(p);
#ifdef PROCDESC
if (p->p_procdesc != NULL)
OpenPOWER on IntegriCloud