1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 00:07:36 +00:00

LibJS: Make GC deferral friendship based

This commit is contained in:
Hendiadyoin1 2023-09-23 13:44:13 +02:00 committed by Andreas Kling
parent 9871bd4bec
commit 87e063db65
3 changed files with 8 additions and 7 deletions

View file

@ -15,12 +15,12 @@ public:
explicit DeferGC(Heap& heap) explicit DeferGC(Heap& heap)
: m_heap(heap) : m_heap(heap)
{ {
m_heap.defer_gc({}); m_heap.defer_gc();
} }
~DeferGC() ~DeferGC()
{ {
m_heap.undefer_gc({}); m_heap.undefer_gc();
} }
private: private:

View file

@ -575,12 +575,12 @@ void Heap::did_destroy_weak_container(Badge<WeakContainer>, WeakContainer& set)
m_weak_containers.remove(set); m_weak_containers.remove(set);
} }
void Heap::defer_gc(Badge<DeferGC>) void Heap::defer_gc()
{ {
++m_gc_deferrals; ++m_gc_deferrals;
} }
void Heap::undefer_gc(Badge<DeferGC>) void Heap::undefer_gc()
{ {
VERIFY(m_gc_deferrals > 0); VERIFY(m_gc_deferrals > 0);
--m_gc_deferrals; --m_gc_deferrals;

View file

@ -73,9 +73,6 @@ public:
void did_create_weak_container(Badge<WeakContainer>, WeakContainer&); void did_create_weak_container(Badge<WeakContainer>, WeakContainer&);
void did_destroy_weak_container(Badge<WeakContainer>, WeakContainer&); void did_destroy_weak_container(Badge<WeakContainer>, WeakContainer&);
void defer_gc(Badge<DeferGC>);
void undefer_gc(Badge<DeferGC>);
BlockAllocator& block_allocator() { return m_block_allocator; } BlockAllocator& block_allocator() { return m_block_allocator; }
void uproot_cell(Cell* cell); void uproot_cell(Cell* cell);
@ -83,6 +80,10 @@ public:
private: private:
friend class MarkingVisitor; friend class MarkingVisitor;
friend class GraphConstructorVisitor; friend class GraphConstructorVisitor;
friend class DeferGC;
void defer_gc();
void undefer_gc();
static bool cell_must_survive_garbage_collection(Cell const&); static bool cell_must_survive_garbage_collection(Cell const&);