From c877eb47a2f3cdd3851d854e27d1fc4fae72c693 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 20 Oct 2022 19:30:29 +0200 Subject: [PATCH] LibWeb: Add GC finalizer for DOM::Node Now that the layout tree is also GC-allocated, we can't be messing with it from the DOM::Node destructor. Move everything to a GC finalizer so we know it runs before the GC sweep phase. --- Userland/Libraries/LibWeb/DOM/Node.cpp | 4 +++- Userland/Libraries/LibWeb/DOM/Node.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/DOM/Node.cpp b/Userland/Libraries/LibWeb/DOM/Node.cpp index d073346ed2..b6b1bcfe58 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.cpp +++ b/Userland/Libraries/LibWeb/DOM/Node.cpp @@ -73,7 +73,9 @@ Node::Node(Document& document, NodeType type) { } -Node::~Node() +Node::~Node() = default; + +void Node::finalize() { if (layout_node() && layout_node()->parent()) layout_node()->parent()->remove_child(*layout_node()); diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h index 9e048a6892..2c5ec5e429 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.h +++ b/Userland/Libraries/LibWeb/DOM/Node.h @@ -622,6 +622,7 @@ protected: Node(Document&, NodeType); virtual void visit_edges(Cell::Visitor&) override; + virtual void finalize() override; JS::GCPtr m_document; JS::GCPtr m_layout_node;