Fix crash from selected nodes when closing scene #108785
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #108783
In a recent change, the
SceneTreedock
node started keeping track of selected nodes so it could disconnect some signals from them whenever the selection changed. However, when a scene is closed, its nodes are deleted before the selection change can complete, causing invalid access to dangling pointers.To fix it, the editor now explicitly tells the scene tree dock to clean after itself when the currently edited scene is closing. Rationale for implementation decisions:
SceneTreeDock
(as opposed to using a signal) becauseEditorNode
already calls many methods directly on the dock.EditorNode::_remove_edited_scene()
since it seems to be the most specific to the situation at hand. Simply closing any scene does not cause the problem, since tracked nodes come from the selection, which applies only to the currently edited scene.