ref: a1ac58b98fe362b5e911ece04bceca4a0ed4a7af
parent: 98bbf64ea41cdef572427d93f6464391de6efe87
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Sun Sep 22 15:49:59 EDT 2013
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.
--- a/sys/src/9/port/chan.c
+++ b/sys/src/9/port/chan.c
@@ -535,7 +535,7 @@
if(up != 0 && palloc.Lock.p != up && canqlock(&clunkq.q)){c = up->dot;
- up->dot = nil;
+ up->dot = up->slash; /* dummy */
if(!waserror()){ kproc("closeproc", closeproc, nil);poperror();
--- a/sys/src/9/port/devproc.c
+++ b/sys/src/9/port/devproc.c
@@ -571,7 +571,7 @@
eqlock(&p->debug);
f = p->fgrp;
- if(f == nil){+ if(f == nil || p->dot == nil){qunlock(&p->debug);
return 0;
}
@@ -956,7 +956,7 @@
qunlock(&p->debug);
nexterror();
}
- if(p->pgrp == nil || p->pid != PID(c->qid))
+ if(p->pgrp == nil || p->dot == nil || p->pid != PID(c->qid))
error(Eprocdied);
mw = c->aux;
if(mw->cddone){--
⑨