From eb432d3da08d943326ab1b285e0e14e51cd17106 Mon Sep 17 00:00:00 2001 From: grorp Date: Sun, 21 Apr 2024 15:52:46 +0200 Subject: [PATCH] Fix some Game members not being freed after some startup errors (#14561) --- src/client/clientlauncher.cpp | 17 ++++------------- src/client/game.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 55ed29ceb..52fadb192 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -172,8 +172,9 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) m_rendering_engine->get_raw_device()-> setWindowCaption(utf8_to_wide(caption).c_str()); - try { // This is used for catching disconnects - +#ifdef NDEBUG + try { +#endif m_rendering_engine->get_gui_env()->clear(); /* @@ -214,18 +215,8 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) chat_backend, &reconnect_requested ); - } //try - catch (con::PeerNotFoundException &e) { - error_message = gettext("Connection error (timed out?)"); - errorstream << error_message << std::endl; - } - catch (ShaderException &e) { - error_message = e.what(); - errorstream << error_message << std::endl; - } - #ifdef NDEBUG - catch (std::exception &e) { + } catch (std::exception &e) { error_message = "Some exception: "; error_message.append(debug_describe_exc(e)); errorstream << error_message << std::endl; diff --git a/src/client/game.cpp b/src/client/game.cpp index 7d5f64624..0123e10d1 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1015,6 +1015,12 @@ Game::Game() : Game::~Game() { + delete client; + delete soundmaker; + sound_manager.reset(); + + delete server; + delete hud; delete camera; delete quicktune; @@ -1267,11 +1273,14 @@ void Game::shutdown() } delete client; + client = nullptr; delete soundmaker; + soundmaker = nullptr; sound_manager.reset(); auto stop_thread = runInThread([=] { delete server; + server = nullptr; }, "ServerStop"); FpsControl fps_control; @@ -4561,6 +4570,13 @@ void the_game(bool *kill, error_message = std::string("ModError: ") + e.what() + strgettext("\nCheck debug.txt for details."); errorstream << error_message << std::endl; + } catch (con::PeerNotFoundException &e) { + error_message = gettext("Connection error (timed out?)"); + errorstream << error_message << std::endl; + } catch (ShaderException &e) { + error_message = e.what(); + errorstream << error_message << std::endl; } + game.shutdown(); }