shithub: riscv

Download patch

ref: 7a9ecbed6a5baa70d5e7248f8a8d5d5eb88260e6
parent: 5331734335d2f1fbe5af90ca6b56ec10ffac48a6
parent: 8a3a36fc056950f2d5aa3bc6b9587fc5e2984ca2
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue May 21 14:58:13 EDT 2013

merge

--- a/sys/src/9/port/allocb.c
+++ b/sys/src/9/port/allocb.c
@@ -64,10 +64,16 @@
 	 */
 	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));
 
--