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];