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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user