From 6c8097a84df72cc8819de64c0a79f895b784d6c8 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Wed, 7 Nov 2012 20:46:30 +0100 Subject: [PATCH] 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. --- sys/src/9/port/proc.c | 1 + 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); -- 2.44.0