diff --git a/Libraries/LibHTML/TreeNode.h b/Libraries/LibHTML/TreeNode.h index f384dd0a1c..75f878fd80 100644 --- a/Libraries/LibHTML/TreeNode.h +++ b/Libraries/LibHTML/TreeNode.h @@ -15,8 +15,19 @@ public: void deref() { ASSERT(m_ref_count); - if (!--m_ref_count) + if (!--m_ref_count) { + if (m_next_sibling) + m_next_sibling->m_previous_sibling = m_previous_sibling; + if (m_previous_sibling) + m_previous_sibling->m_next_sibling = m_next_sibling; + T* next_child; + for (auto* child = m_first_child; child; child = next_child) { + next_child = child->m_next_sibling; + child->m_parent = nullptr; + child->deref(); + } delete static_cast(this); + } } int ref_count() const { return m_ref_count; }