Fix some Game members not being freed after some startup errors (#14561)

This commit is contained in:
grorp 2024-04-21 15:52:46 +02:00 committed by GitHub
parent 4ab3c54f5b
commit eb432d3da0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 13 deletions

@ -172,8 +172,9 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
m_rendering_engine->get_raw_device()-> m_rendering_engine->get_raw_device()->
setWindowCaption(utf8_to_wide(caption).c_str()); 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(); m_rendering_engine->get_gui_env()->clear();
/* /*
@ -214,18 +215,8 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
chat_backend, chat_backend,
&reconnect_requested &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 #ifdef NDEBUG
catch (std::exception &e) { } catch (std::exception &e) {
error_message = "Some exception: "; error_message = "Some exception: ";
error_message.append(debug_describe_exc(e)); error_message.append(debug_describe_exc(e));
errorstream << error_message << std::endl; errorstream << error_message << std::endl;

@ -1015,6 +1015,12 @@ Game::Game() :
Game::~Game() Game::~Game()
{ {
delete client;
delete soundmaker;
sound_manager.reset();
delete server;
delete hud; delete hud;
delete camera; delete camera;
delete quicktune; delete quicktune;
@ -1267,11 +1273,14 @@ void Game::shutdown()
} }
delete client; delete client;
client = nullptr;
delete soundmaker; delete soundmaker;
soundmaker = nullptr;
sound_manager.reset(); sound_manager.reset();
auto stop_thread = runInThread([=] { auto stop_thread = runInThread([=] {
delete server; delete server;
server = nullptr;
}, "ServerStop"); }, "ServerStop");
FpsControl fps_control; FpsControl fps_control;
@ -4561,6 +4570,13 @@ void the_game(bool *kill,
error_message = std::string("ModError: ") + e.what() + error_message = std::string("ModError: ") + e.what() +
strgettext("\nCheck debug.txt for details."); strgettext("\nCheck debug.txt for details.");
errorstream << error_message << std::endl; 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(); game.shutdown();
} }