From 3b869e802769e4153cc1239cd765c5a34cd47a53 Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Tue, 25 Oct 2022 09:31:56 +0800 Subject: [PATCH] Fix crash of queue_free() when main loop is not SceneTree (cherry picked from commit 3b08d0e85233a594b016ae27e06b5f21536a6176) --- 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 f3df322a3a7..c30a44c8b72 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2887,10 +2887,14 @@ void Node::print_stray_nodes() { } void Node::queue_delete() { + // 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); } }