ref: eaf0c40836472a1085905ba27b0ce842cef6d8ae
parent: dc5e2749b2a80e395d47e03ada03d1d66a978032
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Wed Nov 7 15:46:30 EST 2012
fix spurious kproc ppid newproc() didnt zero parentpid and kproc() didnt set it, so kprocs ended up with random parent pid. this is harmless as kprocs have no up->parent but it gives confusing results in pstree(1). now we zero parentpid in newproc(), and set it in sysrfork() unless RFNOWAIT has been set.
--- a/sys/src/9/port/proc.c
+++ b/sys/src/9/port/proc.c
@@ -644,6 +644,7 @@
p->nargs = 0;
p->setargs = 0;
memset(p->seg, 0, sizeof p->seg);
+ p->parentpid = 0;
p->noteid = pidalloc(p);
if(p->kstack == 0)
p->kstack = smalloc(KSTACK);
--- a/sys/src/9/port/sysproc.c
+++ b/sys/src/9/port/sysproc.c
@@ -169,10 +169,8 @@
forkchild(p, up->dbgreg);
p->parent = up;
- p->parentpid = up->pid;
- if(flag&RFNOWAIT)
- p->parentpid = 0;
- else {+ if((flag&RFNOWAIT) == 0){+ p->parentpid = up->pid;
lock(&up->exl);
up->nchild++;
unlock(&up->exl);
--
⑨