From 3b08d0e85233a594b016ae27e06b5f21536a6176 Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Tue, 25 Oct 2022 09:31:56 +0800 Subject: Fix crash of queue_free() when main loop is not SceneTree --- scene/main/node.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 377620af64..5dd0911694 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2581,10 +2581,14 @@ void Node::print_orphan_nodes() { } void Node::queue_free() { + // There are users which instantiate multiple scene trees for their games. + // Use the node's own tree to handle its deletion when relevant. if (is_inside_tree()) { get_tree()->queue_delete(this); } else { - SceneTree::get_singleton()->queue_delete(this); + SceneTree *tree = SceneTree::get_singleton(); + ERR_FAIL_NULL_MSG(tree, "Can't queue free a node when no SceneTree is available."); + tree->queue_delete(this); } } -- cgit v1.2.3