Преглед изворни кода

Fix crash of queue_free() when main loop is not SceneTree

Haoyu Qiu пре 2 година
родитељ
комит
3b08d0e852
1 измењених фајлова са 5 додато и 1 уклоњено
  1. 5 1
      scene/main/node.cpp

+ 5 - 1
scene/main/node.cpp

@@ -2581,10 +2581,14 @@ void Node::print_orphan_nodes() {
 }
 }
 
 
 void Node::queue_free() {
 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()) {
 	if (is_inside_tree()) {
 		get_tree()->queue_delete(this);
 		get_tree()->queue_delete(this);
 	} else {
 	} 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);
 	}
 	}
 }
 }