summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-09-11 11:25:10 +0000
committerkib <kib@FreeBSD.org>2014-09-11 11:25:10 +0000
commit9b5b98982ca5d1dbe97700ab676dcb8864f6f2ff (patch)
tree52b383a4faf3f92308c9c18c3699c6271399ad48
parent8081f48b5d0c01d86d5b3d32021fa12d8138cba1 (diff)
downloadFreeBSD-src-9b5b98982ca5d1dbe97700ab676dcb8864f6f2ff.zip
FreeBSD-src-9b5b98982ca5d1dbe97700ab676dcb8864f6f2ff.tar.gz
MFC r270993 (by mjg):
Fix up proc_realparent to always return correct process. Approved by: re (delphij)
-rw-r--r--sys/kern/kern_exit.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index ff54908..81ebd60 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -106,8 +106,12 @@ proc_realparent(struct proc *child)
sx_assert(&proctree_lock, SX_LOCKED);
if ((child->p_treeflag & P_TREE_ORPHANED) == 0) {
- return (child->p_pptr->p_pid == child->p_oppid ?
- child->p_pptr : initproc);
+ if (child->p_oppid == 0 ||
+ child->p_pptr->p_pid == child->p_oppid)
+ parent = child->p_pptr;
+ else
+ parent = initproc;
+ return (parent);
}
for (p = child; (p->p_treeflag & P_TREE_FIRST_ORPHAN) == 0;) {
/* Cannot use LIST_PREV(), since the list head is not known. */
OpenPOWER on IntegriCloud