diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 4479eeb66af..941b1d00a23 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 7a26156ab8d..a2ee61697f3 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -908,6 +908,7 @@ public: 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 86abf94c0ad..870f7d31b83 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -4170,7 +4170,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; } @@ -4203,6 +4209,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; }