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.
This commit is contained in:
parent
479ea049e3
commit
6c8097a84d
|
@ -644,6 +644,7 @@ newproc(void)
|
||||||
p->nargs = 0;
|
p->nargs = 0;
|
||||||
p->setargs = 0;
|
p->setargs = 0;
|
||||||
memset(p->seg, 0, sizeof p->seg);
|
memset(p->seg, 0, sizeof p->seg);
|
||||||
|
p->parentpid = 0;
|
||||||
p->noteid = pidalloc(p);
|
p->noteid = pidalloc(p);
|
||||||
if(p->kstack == 0)
|
if(p->kstack == 0)
|
||||||
p->kstack = smalloc(KSTACK);
|
p->kstack = smalloc(KSTACK);
|
||||||
|
|
|
@ -169,10 +169,8 @@ sysrfork(ulong *arg)
|
||||||
forkchild(p, up->dbgreg);
|
forkchild(p, up->dbgreg);
|
||||||
|
|
||||||
p->parent = up;
|
p->parent = up;
|
||||||
p->parentpid = up->pid;
|
if((flag&RFNOWAIT) == 0){
|
||||||
if(flag&RFNOWAIT)
|
p->parentpid = up->pid;
|
||||||
p->parentpid = 0;
|
|
||||||
else {
|
|
||||||
lock(&up->exl);
|
lock(&up->exl);
|
||||||
up->nchild++;
|
up->nchild++;
|
||||||
unlock(&up->exl);
|
unlock(&up->exl);
|
||||||
|
|
Loading…
Reference in a new issue