ref: b4cdfc6c5517390d6be05b2c01e56bacc9e85ea8
parent: 99167104f9d37ebce135ec16b506b47b62cfb975
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){--
⑨