shithub: riscv

Download patch

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){
--