diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index fd49920c6b16..870c74b34825 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -3340,13 +3340,17 @@ void EditorNode::_exit_editor(int p_exit_code) { dim_editor(true); // Unload addons before quitting to allow cleanup. + unload_editor_addons(); + + get_tree()->quit(p_exit_code); +} + +void EditorNode::unload_editor_addons() { for (const KeyValue &E : addon_name_to_plugin) { print_verbose(vformat("Unloading addon: %s", E.key)); remove_editor_plugin(E.value, false); memdelete(E.value); } - - get_tree()->quit(p_exit_code); } void EditorNode::_discard_changes(const String &p_str) { diff --git a/editor/editor_node.h b/editor/editor_node.h index 7a26156ab8dd..a2ee61697f3e 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -908,6 +908,7 @@ class EditorNode : public Node { void save_before_run(); void try_autosave(); void restart_editor(); + void unload_editor_addons(); void dim_editor(bool p_dimming); bool is_editor_dimmed() const; diff --git a/main/main.cpp b/main/main.cpp index 060b3fe2f608..c43fc7078b90 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -4176,7 +4176,13 @@ bool Main::iteration() { movie_writer->add_frame(); } +#ifdef TOOLS_ENABLED + bool quit_after_timeout = false; +#endif if ((quit_after > 0) && (Engine::get_singleton()->_process_frames >= quit_after)) { +#ifdef TOOLS_ENABLED + quit_after_timeout = true; +#endif exit = true; } @@ -4209,6 +4215,12 @@ bool Main::iteration() { } #endif +#ifdef TOOLS_ENABLED + if (exit && quit_after_timeout && EditorNode::get_singleton()) { + EditorNode::get_singleton()->unload_editor_addons(); + } +#endif + return exit; }