diff options
| -rw-r--r-- | sys/src/9/port/allocb.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/src/9/port/allocb.c b/sys/src/9/port/allocb.c index c6989452b..97176d76d 100644 --- a/sys/src/9/port/allocb.c +++ b/sys/src/9/port/allocb.c @@ -64,10 +64,16 @@ allocb(int size) */ if(up == nil) panic("allocb without up: %#p", getcallerpc(&size)); - if((b = _allocb(size)) == nil){ - xsummary(); - mallocsummary(); - panic("allocb: no memory for %d bytes", size); + while((b = _allocb(size)) == nil){ + if(up->nlocks.ref || m->ilockdepth || !islo()){ + xsummary(); + mallocsummary(); + panic("allocb: no memory for %d bytes", size); + } + if(!waserror()){ + resrcwait("no memory for allocb"); + poperror(); + } } setmalloctag(b, getcallerpc(&size)); |
