devproc: check for p->dot == nil, run closeproc with up->dot = up->slash
p->dot can be nil when process exits (see pexit()) set closeprocs dot to up->slash so it will show up right in devproc.
This commit is contained in:
parent
99167104f9
commit
b4cdfc6c55
|
@ -535,7 +535,7 @@ closechanq(Chan *c)
|
||||||
|
|
||||||
if(up != 0 && palloc.Lock.p != up && canqlock(&clunkq.q)){
|
if(up != 0 && palloc.Lock.p != up && canqlock(&clunkq.q)){
|
||||||
c = up->dot;
|
c = up->dot;
|
||||||
up->dot = nil;
|
up->dot = up->slash; /* dummy */
|
||||||
if(!waserror()){
|
if(!waserror()){
|
||||||
kproc("closeproc", closeproc, nil);
|
kproc("closeproc", closeproc, nil);
|
||||||
poperror();
|
poperror();
|
||||||
|
|
|
@ -571,7 +571,7 @@ procfds(Proc *p, char *va, int count, long offset)
|
||||||
|
|
||||||
eqlock(&p->debug);
|
eqlock(&p->debug);
|
||||||
f = p->fgrp;
|
f = p->fgrp;
|
||||||
if(f == nil){
|
if(f == nil || p->dot == nil){
|
||||||
qunlock(&p->debug);
|
qunlock(&p->debug);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -956,7 +956,7 @@ procread(Chan *c, void *va, long n, vlong off)
|
||||||
qunlock(&p->debug);
|
qunlock(&p->debug);
|
||||||
nexterror();
|
nexterror();
|
||||||
}
|
}
|
||||||
if(p->pgrp == nil || p->pid != PID(c->qid))
|
if(p->pgrp == nil || p->dot == nil || p->pid != PID(c->qid))
|
||||||
error(Eprocdied);
|
error(Eprocdied);
|
||||||
mw = c->aux;
|
mw = c->aux;
|
||||||
if(mw->cddone){
|
if(mw->cddone){
|
||||||
|
|
Loading…
Reference in a new issue