summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-11-07 20:46:30 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-11-07 20:46:30 +0100
commit6c8097a84df72cc8819de64c0a79f895b784d6c8 (patch)
tree25e1a783964a2bb556bb48011f8b1c7f2fe6dc84
parent479ea049e339ebcb94230384646e605aeb213ab8 (diff)
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.
-rw-r--r--sys/src/9/port/proc.c1
-rw-r--r--sys/src/9/port/sysproc.c6
2 files changed, 3 insertions, 4 deletions
diff --git a/sys/src/9/port/proc.c b/sys/src/9/port/proc.c
index 3abc16080..06bdf474e 100644
--- a/sys/src/9/port/proc.c
+++ b/sys/src/9/port/proc.c
@@ -644,6 +644,7 @@ newproc(void)
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);
diff --git a/sys/src/9/port/sysproc.c b/sys/src/9/port/sysproc.c
index c4075fa1e..177c4a798 100644
--- a/sys/src/9/port/sysproc.c
+++ b/sys/src/9/port/sysproc.c
@@ -169,10 +169,8 @@ sysrfork(ulong *arg)
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);