diff options
author | kib <kib@FreeBSD.org> | 2012-03-13 22:00:46 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2012-03-13 22:00:46 +0000 |
commit | 6e85340add3ff3bca6ff2fab3cec4f54fb2426e0 (patch) | |
tree | e7dd4ad4a81d5d26fc70479264f88bbba3c4ee3b /sys/kern | |
parent | 5e42a47a6830fc5f68aba2e93ac2c686d544c4c4 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/kern/kern_exit.c | 2 |
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) |