diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 6eec6b83713c..8e5c63196b8b 100644 --- a/scene/main/scene_tree.cpp +++ b/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 &timer : timers) { diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h index 452fac7423ff..9b550f713580 100644 --- a/scene/main/scene_tree.h +++ b/scene/main/scene_tree.h @@ -138,7 +138,6 @@ class SceneTree : public MainLoop { HashMap group_map; bool _quit = false; - bool initialized = false; StringName tree_changed_name = "tree_changed"; StringName node_added_name = "node_added";