git: 9front

Download patch

ref: 1349cf6174d0808febc6d7d19e5c9d510ccb61dc
parent: b4677f563ddab441a94b3453327bbaa949a75018
author: cinap_lenrek <cinap_lenrek@rei2.9hal>
date: Mon Feb 6 00:28:57 EST 2012

make smalloc() uninterruptable as most callers cant handle it anyway

--- a/sys/src/9/port/alloc.c
+++ b/sys/src/9/port/alloc.c
@@ -174,7 +174,10 @@
 		v = poolalloc(mainmem, size+Npadlong*sizeof(ulong));
 		if(v != nil)
 			break;
-		tsleep(&up->sleep, return0, 0, 100);
+		if(!waserror()){
+			tsleep(&up->sleep, return0, 0, 100);
+			poperror();
+		}
 	}
 	if(Npadlong){
 		v = (ulong*)v+Npadlong;
--- a/sys/src/9/port/debugalloc.c
+++ b/sys/src/9/port/debugalloc.c
@@ -440,7 +440,10 @@
 remember(getcallerpc(&size), v);
 		if(v != nil)
 			break;
-		tsleep(&up->sleep, return0, 0, 100);
+		if(!waserror()){
+			tsleep(&up->sleep, return0, 0, 100);
+			poperror();
+		}
 	}
 	memset(v, 0, size);
 	return v;
--- a/sys/src/9/port/devenv.c
+++ b/sys/src/9/port/devenv.c
@@ -283,7 +283,11 @@
 
 	len = offset+n;
 	if(len > e->len) {
-		s = smalloc(len);
+		s = malloc(len);
+		if(s == nil){
+			wunlock(eg);
+			error(Enomem);
+		}
 		if(e->value){
 			memmove(s, e->value, e->len);
 			free(e->value);
--- a/sys/src/9/port/proc.c
+++ b/sys/src/9/port/proc.c
@@ -1123,12 +1123,7 @@
 			panic("boot process died: %s", exitstr);
 		}
 
-		while(waserror())
-			;
-
 		wq = smalloc(sizeof(Waitq));
-		poperror();
-
 		wq->w.pid = up->pid;
 		utime = up->time[TUser] + up->time[TCUser];
 		stime = up->time[TSys] + up->time[TCSys];
--