Browse Source

Merge pull request #72248 from RedwanFox/mainloop_init_order_fix

Ensure that SceneTree is initialized and finalized at correct time
Yuri Sizov 2 years ago
parent
commit
7ff2a93952
2 changed files with 6 additions and 10 deletions
  1. 6 9
      scene/main/scene_tree.cpp
  2. 0 1
      scene/main/scene_tree.h

+ 6 - 9
scene/main/scene_tree.cpp

@@ -444,9 +444,8 @@ void SceneTree::set_group(const StringName &p_group, const String &p_name, const
 
 void SceneTree::initialize() {
 	ERR_FAIL_NULL(root);
-	initialized = true;
-	root->_set_tree(this);
 	MainLoop::initialize();
+	root->_set_tree(this);
 }
 
 bool SceneTree::physics_process(double p_time) {
@@ -618,20 +617,18 @@ void SceneTree::finalize() {
 
 	_flush_ugc();
 
-	initialized = false;
-
-	MainLoop::finalize();
-
 	if (root) {
 		root->_set_tree(nullptr);
 		root->_propagate_after_exit_tree();
 		memdelete(root); //delete root
 		root = nullptr;
+
+		// In case deletion of some objects was queued when destructing the `root`.
+		// E.g. if `queue_free()` was called for some node outside the tree when handling NOTIFICATION_PREDELETE for some node in the tree.
+		_flush_delete_queue();
 	}
 
-	// In case deletion of some objects was queued when destructing the `root`.
-	// E.g. if `queue_free()` was called for some node outside the tree when handling NOTIFICATION_PREDELETE for some node in the tree.
-	_flush_delete_queue();
+	MainLoop::finalize();
 
 	// Cleanup timers.
 	for (Ref<SceneTreeTimer> &timer : timers) {

+ 0 - 1
scene/main/scene_tree.h

@@ -138,7 +138,6 @@ private:
 
 	HashMap<StringName, Group> group_map;
 	bool _quit = false;
-	bool initialized = false;
 
 	StringName tree_changed_name = "tree_changed";
 	StringName node_added_name = "node_added";