kernel: image reclaim pauses
get a bit more verbose about process image exhaustion and make imagreclaim() try to get at least one image on the freelist. use rsrcwait() to notify the state, and call freebroken() in case imagereclaim() couldnt free any images.
This commit is contained in:
parent
3e567afed5
commit
24b908be8a
1 changed files with 5 additions and 2 deletions
|
@ -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++;
|
||||
|
|
Loading…
Reference in a new issue