[haiku-commits] r34898 - haiku/trunk/src/system/kernel/vm

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 4 Jan 2010 21:43:25 +0100 (CET)

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();
 


Other related posts:

  • » [haiku-commits] r34898 - haiku/trunk/src/system/kernel/vm - ingo_weinhold