diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-08-14 11:36:29 +0300 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-08-14 11:36:29 +0300 |
commit | f15ad7235548130be49e00b44b33e8eb64bb6bc3 (patch) | |
tree | 38695c74188f2a716c4dcca079040f55038750d4 | |
parent | 06fbc8395b3c0ec6fa38588caea2ee94837f7b97 (diff) | |
download | redot-engine-f15ad7235548130be49e00b44b33e8eb64bb6bc3.tar.gz |
Run cleanup code on DisplayServer init failure to prevent crash on exit.
-rw-r--r-- | main/main.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/main/main.cpp b/main/main.cpp index e42469b51b..588b8da9bd 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -2465,7 +2465,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph OS::get_singleton()->benchmark_end_measure("Startup", "Main::Setup"); if (p_second_phase) { - return setup2(); + exit_err = setup2(); + if (exit_err != OK) { + goto error; + } } return OK; @@ -2763,6 +2766,30 @@ Error Main::setup2(bool p_show_boot_logo) { if (err != OK || display_server == nullptr) { ERR_PRINT("Unable to create DisplayServer, all display drivers failed.\nUse \"--headless\" command line argument to run the engine in headless mode if this is desired (e.g. for continuous integration)."); + + if (display_server) { + memdelete(display_server); + } + + GDExtensionManager::get_singleton()->deinitialize_extensions(GDExtension::INITIALIZATION_LEVEL_SERVERS); + uninitialize_modules(MODULE_INITIALIZATION_LEVEL_SERVERS); + unregister_server_types(); + + if (input) { + memdelete(input); + } + if (tsman) { + memdelete(tsman); + } +#ifndef _3D_DISABLED + if (physics_server_3d_manager) { + memdelete(physics_server_3d_manager); + } +#endif // _3D_DISABLED + if (physics_server_2d_manager) { + memdelete(physics_server_2d_manager); + } + return err; } |