From 2db9397fb949086cd403cd6180240334a3272c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Wed, 5 Jan 2022 14:00:04 +0100 Subject: [PATCH] Clear only owners that are no longer in the same tree --- scene/main/node.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/scene/main/node.cpp b/scene/main/node.cpp index bec01762d86..8b5883a742c 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -229,15 +229,32 @@ void Node::_propagate_enter_tree() { } void Node::_propagate_after_exit_tree() { + // Clear owner if it was not part of the pruned branch if (data.owner) { - data.owner->data.owned.erase(data.OW); - data.owner = nullptr; + bool found = false; + Node *parent = data.parent; + + while (parent) { + if (parent == data.owner) { + found = true; + break; + } + + parent = parent->data.parent; + } + + if (!found) { + data.owner->data.owned.erase(data.OW); + data.owner = nullptr; + } } + data.blocked++; for (int i = data.children.size() - 1; i >= 0; i--) { data.children[i]->_propagate_after_exit_tree(); } data.blocked--; + emit_signal(SceneStringNames::get_singleton()->tree_exited); }