diff options
author | kib <kib@FreeBSD.org> | 2014-09-11 11:25:10 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2014-09-11 11:25:10 +0000 |
commit | 9b5b98982ca5d1dbe97700ab676dcb8864f6f2ff (patch) | |
tree | 52b383a4faf3f92308c9c18c3699c6271399ad48 | |
parent | 8081f48b5d0c01d86d5b3d32021fa12d8138cba1 (diff) | |
download | FreeBSD-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.c | 8 |
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. */ |