diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 520666faa83..0614aa55bd8 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -6457,6 +6457,18 @@ void EditorNode::reload_instances_with_path_in_edited_scenes() { get_scene_editor_data_for_node(owner, original_node, scene_editor_data_table); + // The current node being reloaded may also be an additional node for another node + // that is in the process of being reloaded. + // Replacing the additional node with the new one prevents a crash where nodes + // in 'addition_list' are removed from the scene tree and queued for deletion. + for (InstanceModificationsEntry &im : scene_modifications->instance_list) { + for (AdditiveNodeEntry &additive_node_entry : im.addition_list) { + if (additive_node_entry.node == original_node) { + additive_node_entry.node = instantiated_node; + } + } + } + bool original_node_scene_instance_load_placeholder = original_node->get_scene_instance_load_placeholder(); // Delete all the remaining node children.