|
@@ -2537,7 +2537,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|
OS::get_singleton()->benchmark_end_measure("Startup", "Main::Setup");
|
|
OS::get_singleton()->benchmark_end_measure("Startup", "Main::Setup");
|
|
|
|
|
|
if (p_second_phase) {
|
|
if (p_second_phase) {
|
|
- return setup2();
|
|
|
|
|
|
+ exit_err = setup2();
|
|
|
|
+ if (exit_err != OK) {
|
|
|
|
+ goto error;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return OK;
|
|
return OK;
|
|
@@ -2835,6 +2838,30 @@ Error Main::setup2(bool p_show_boot_logo) {
|
|
|
|
|
|
if (err != OK || display_server == nullptr) {
|
|
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).");
|
|
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;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|