1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-06 09:09:40 +02:00

Added semi-workaround method for network thread shutdown:

Currently closing game while network thread is waiting for something is
very bug-prone, since network thread may resume during shutdown and
access partially destroyed client state.

Now if exit has been requested, the very first step would be semi-
graceful shutdown of network thread (via exception throwing). This may
in theory skip some cleanup in non-RAII code, but since game is shutting
down this does not matters much.

This logic applies to:
- shutting down while network thread is waiting for dialogs
- shuttind down while network thread waiting for animations in combat
This commit is contained in:
Ivan Savenko
2024-05-18 11:04:10 +00:00
parent 0dfa781655
commit 9bfe000724
27 changed files with 163 additions and 128 deletions

View File

@@ -346,6 +346,19 @@ void CClient::save(const std::string & fname)
sendRequest(&save_game, PlayerColor::NEUTRAL);
}
void CClient::endNetwork()
{
if (CPlayerInterface::battleInt)
CPlayerInterface::battleInt->endNetwork();
for(auto & i : playerint)
{
auto interface = std::dynamic_pointer_cast<CPlayerInterface>(i.second);
if (interface)
interface->endNetwork();
}
}
void CClient::endGame()
{
#if SCRIPTING_ENABLED