diff --git a/src/system/kernel/vm/vm_page.cpp b/src/system/kernel/vm/vm_page.cpp index ae44aa4294..5abddea4f6 100644 --- a/src/system/kernel/vm/vm_page.cpp +++ b/src/system/kernel/vm/vm_page.cpp @@ -1470,8 +1470,14 @@ steal_pages(vm_page **pages, size_t count) // we need to wait for pages to become inactive - ConditionVariableEntry freeConditionEntry; sPageDeficit++; + if (sUnreservedFreePages >= 0) { + // There are enough pages available now. No need to wait after all. + sPageDeficit--; + return stolen; + } + + ConditionVariableEntry freeConditionEntry; freeConditionEntry.Add(&sFreePageQueue); locker.Unlock();