It's potentially unsafe to access `m_root` in the destructor since it may have been swept, so move unregistration of the NodeIterator into a GC finalizer instead.
@@ -19,8 +19,11 @@ NodeIterator::NodeIterator(Node& root)
root.document().register_node_iterator({}, *this);
}
-NodeIterator::~NodeIterator()
+NodeIterator::~NodeIterator() = default;
+
+void NodeIterator::finalize()
{
+ Base::finalize();
m_root->document().unregister_node_iterator({}, *this);
@@ -38,6 +38,7 @@ private:
explicit NodeIterator(Node& root);
virtual void visit_edges(Cell::Visitor&) override;
+ virtual void finalize() override;
enum class Direction {
Next,