Browse Source

LibJS: Always prefer freelist over lazy freelist if possible

If we're able to allocate cells from a freelist, we should always
prefer that over the lazy freelist, since this may further defer
faulting in additional memory for the HeapBlock.

Thanks to @gunnarbeutner for pointing this out. :^)
Andreas Kling 4 years ago
parent
commit
aa857bcdeb
1 changed files with 5 additions and 4 deletions
  1. 5 4
      Userland/Libraries/LibJS/Heap/HeapBlock.h

+ 5 - 4
Userland/Libraries/LibJS/Heap/HeapBlock.h

@@ -29,12 +29,13 @@ public:
 
     ALWAYS_INLINE Cell* allocate()
     {
+        if (m_freelist) {
+            VERIFY(is_valid_cell_pointer(m_freelist));
+            return exchange(m_freelist, m_freelist->next);
+        }
         if (has_lazy_freelist())
             return cell(m_next_lazy_freelist_index++);
-        if (!m_freelist)
-            return nullptr;
-        VERIFY(is_valid_cell_pointer(m_freelist));
-        return exchange(m_freelist, m_freelist->next);
+        return nullptr;
     }
 
     void deallocate(Cell*);