Skip to content

Commit 571e05d

Browse files
RandomShaperakien-mga
authored andcommitted
Clear only owners that are no longer in the same tree
(cherry picked from commit 2db9397)
1 parent 716580b commit 571e05d

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

scene/main/node.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,15 +234,32 @@ void Node::_propagate_enter_tree() {
234234
}
235235

236236
void Node::_propagate_after_exit_tree() {
237+
// Clear owner if it was not part of the pruned branch
237238
if (data.owner) {
238-
data.owner->data.owned.erase(data.OW);
239-
data.owner = nullptr;
239+
bool found = false;
240+
Node *parent = data.parent;
241+
242+
while (parent) {
243+
if (parent == data.owner) {
244+
found = true;
245+
break;
246+
}
247+
248+
parent = parent->data.parent;
249+
}
250+
251+
if (!found) {
252+
data.owner->data.owned.erase(data.OW);
253+
data.owner = nullptr;
254+
}
240255
}
256+
241257
data.blocked++;
242258
for (int i = 0; i < data.children.size(); i++) {
243259
data.children[i]->_propagate_after_exit_tree();
244260
}
245261
data.blocked--;
262+
246263
emit_signal(SceneStringNames::get_singleton()->tree_exited);
247264
}
248265

0 commit comments

Comments
 (0)