shithub: riscv

Download patch

ref: d3b727db18c04b1eb485399dfcebff8ff61d8c7b
parent: 9500191af630673a28266cab9b4e109275847c90
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Sun May 5 00:28:50 EDT 2013

devip: dont raise error() out of Fsprotocone()

Fsprotoclone() is not supposed to raise error, but return nil.
ipopen() seemed to assume otherwise as it setup error label
before calling Fsprotoclone(). fix ipopen(), make Fsprotoclone()
return nil instead of raising error.

--- a/sys/src/9/ip/devip.c
+++ b/sys/src/9/ip/devip.c
@@ -407,13 +407,8 @@
 	case Qclone:
 		p = f->p[PROTO(c->qid)];
 		qlock(p);
-		if(waserror()){
-			qunlock(p);
-			nexterror();
-		}
 		cv = Fsprotoclone(p, ATTACHER(c));
 		qunlock(p);
-		poperror();
 		if(cv == nil) {
 			error(Enodev);
 			break;
@@ -1285,7 +1280,7 @@
 		if(c == nil){
 			c = malloc(sizeof(Conv));
 			if(c == nil)
-				error(Enomem);
+				return nil;
 			if(waserror()){
 				qfree(c->rq);
 				qfree(c->wq);
@@ -1293,7 +1288,7 @@
 				qfree(c->sq);
 				free(c->ptcl);
 				free(c);
-				nexterror();
+				return nil;
 			}
 			c->p = p;
 			c->x = pp - p->conv;
--