summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/port/segment.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/src/9/port/segment.c b/sys/src/9/port/segment.c
index 98e9cbfa0..d3ad7cfbb 100644
--- a/sys/src/9/port/segment.c
+++ b/sys/src/9/port/segment.c
@@ -264,7 +264,10 @@ attachimage(int type, Chan *c, ulong base, ulong len)
while(!(i = imagealloc.free)) {
unlock(&imagealloc);
imagereclaim();
- sched();
+ if(!imagealloc.free){
+ freebroken(); /* can use the memory */
+ resrcwait("no image after reclaim");
+ }
lock(&imagealloc);
}
@@ -328,7 +331,7 @@ imagereclaim(void)
* end of the list (see putpage) so start there and work
* backward.
*/
- for(p = palloc.tail; p && p->image && n<1000; p = p->prev) {
+ for(p = palloc.tail; p && p->image && (n<1000 || !imagealloc.free); p = p->prev) {
if(p->ref == 0 && canlock(p)) {
if(p->ref == 0) {
n++;