Author: bonefish Date: 2010-01-04 21:43:25 +0100 (Mon, 04 Jan 2010) New Revision: 34898 Changeset: http://dev.haiku-os.org/changeset/34898/haiku Modified: haiku/trunk/src/system/kernel/vm/vm_page.cpp Log: steal_pages(): Recheck sUnreservedFreePages after incrementing sPageDeficit. Since the former is no longer guarded by any lock, there's a race condition with vm_page_unreserve_pages() which would cause us to wait longer than necessary. Modified: haiku/trunk/src/system/kernel/vm/vm_page.cpp =================================================================== --- haiku/trunk/src/system/kernel/vm/vm_page.cpp 2010-01-04 19:37:25 UTC (rev 34897) +++ haiku/trunk/src/system/kernel/vm/vm_page.cpp 2010-01-04 20:43:25 UTC (rev 34898) @@ -1470,8 +1470,14 @@ // we need to wait for pages to become inactive + sPageDeficit++; + if (sUnreservedFreePages >= 0) { + // There are enough pages available now. No need to wait after all. + sPageDeficit--; + return stolen; + } + ConditionVariableEntry freeConditionEntry; - sPageDeficit++; freeConditionEntry.Add(&sFreePageQueue); locker.Unlock();