diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-11-07 20:46:30 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-11-07 20:46:30 +0100 |
commit | 6c8097a84df72cc8819de64c0a79f895b784d6c8 (patch) | |
tree | 25e1a783964a2bb556bb48011f8b1c7f2fe6dc84 | |
parent | 479ea049e339ebcb94230384646e605aeb213ab8 (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.c | 1 | ||||
-rw-r--r-- | sys/src/9/port/sysproc.c | 6 |
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); |