summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@rei2.9hal>2012-02-06 05:28:57 +0100
committercinap_lenrek <cinap_lenrek@rei2.9hal>2012-02-06 05:28:57 +0100
commit5acde1e791e879cc24dc4fe8738994ea3a4bb9ba (patch)
treeb147efa4ce3f9846e688eb611347eb43766d47ab
parent1a450db960aa3c542c84a5fff0f66c5ce95c853f (diff)
make smalloc() uninterruptable as most callers cant handle it anyway
-rw-r--r--sys/src/9/port/alloc.c5
-rw-r--r--sys/src/9/port/debugalloc.c5
-rw-r--r--sys/src/9/port/devenv.c6
-rw-r--r--sys/src/9/port/proc.c5
4 files changed, 13 insertions, 8 deletions
diff --git a/sys/src/9/port/alloc.c b/sys/src/9/port/alloc.c
index ed9797967..194eb9f37 100644
--- a/sys/src/9/port/alloc.c
+++ b/sys/src/9/port/alloc.c
@@ -174,7 +174,10 @@ smalloc(ulong size)
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;
diff --git a/sys/src/9/port/debugalloc.c b/sys/src/9/port/debugalloc.c
index e6a97e048..48f9f7126 100644
--- a/sys/src/9/port/debugalloc.c
+++ b/sys/src/9/port/debugalloc.c
@@ -440,7 +440,10 @@ smalloc(ulong size)
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;
diff --git a/sys/src/9/port/devenv.c b/sys/src/9/port/devenv.c
index b744b12fe..e93a95139 100644
--- a/sys/src/9/port/devenv.c
+++ b/sys/src/9/port/devenv.c
@@ -283,7 +283,11 @@ envwrite(Chan *c, void *a, long n, vlong off)
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);
diff --git a/sys/src/9/port/proc.c b/sys/src/9/port/proc.c
index 37cdbf18d..b3249ec97 100644
--- a/sys/src/9/port/proc.c
+++ b/sys/src/9/port/proc.c
@@ -1123,12 +1123,7 @@ pexit(char *exitstr, int freemem)
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];