diff options
Diffstat (limited to 'Source/bmalloc/bmalloc/Heap.cpp')
-rw-r--r-- | Source/bmalloc/bmalloc/Heap.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/Source/bmalloc/bmalloc/Heap.cpp b/Source/bmalloc/bmalloc/Heap.cpp index d1b58cfac..39d071fcb 100644 --- a/Source/bmalloc/bmalloc/Heap.cpp +++ b/Source/bmalloc/bmalloc/Heap.cpp @@ -131,13 +131,16 @@ void Heap::scavengeSmallPages(std::unique_lock<StaticMutex>& lock, std::chrono:: void Heap::scavengeLargeObjects(std::unique_lock<StaticMutex>& lock, std::chrono::milliseconds sleepDuration) { - while (XLargeRange range = m_largeFree.removePhysical()) { + auto& ranges = m_largeFree.ranges(); + for (size_t i = ranges.size(); i-- > 0; i = std::min(i, ranges.size())) { + auto range = ranges.pop(i); + lock.unlock(); vmDeallocatePhysicalPagesSloppy(range.begin(), range.size()); lock.lock(); - + range.setPhysicalSize(0); - m_largeFree.add(range); + ranges.push(range); waitUntilFalse(lock, sleepDuration, m_isAllocatingPages); } |