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)
downloadplan9front-6c8097a84df72cc8819de64c0a79f895b784d6c8.tar.xz
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);