mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
fixed possible race condition
This commit is contained in:
parent
78885b8acc
commit
09df2dcfbb
@ -1355,8 +1355,10 @@ void startGame(StartInfo * options, CConnection *serv/* = nullptr*/)
|
||||
client->loadGame(fname,vm.count("loadserver"),vm.count("loadhumanplayerindices") ? vm["loadhumanplayerindices"].as<std::vector<int>>() : std::vector<int>(),vm.count("loadnumplayers") ? vm["loadnumplayers"].as<int>() : 1,vm["loadplayer"].as<int>(),vm.count("loadserverip") ? vm["loadserverip"].as<std::string>() : "", vm.count("loadserverport") ? vm["loadserverport"].as<ui16>() : CServerHandler::getDefaultPort());
|
||||
break;
|
||||
}
|
||||
|
||||
client->connectionHandler = new boost::thread(&CClient::run, client);
|
||||
{
|
||||
TLockGuard _(client->connectionHandlerMutex);
|
||||
client->connectionHandler = make_unique<boost::thread>(&CClient::run, client);
|
||||
}
|
||||
}
|
||||
|
||||
void endGame()
|
||||
|
@ -113,7 +113,10 @@ void CClient::init()
|
||||
{
|
||||
waitingRequest.clear();
|
||||
hotSeat = false;
|
||||
connectionHandler = nullptr;
|
||||
{
|
||||
TLockGuard _(connectionHandlerMutex);
|
||||
connectionHandler.reset();
|
||||
}
|
||||
pathInfo = nullptr;
|
||||
applier = new CApplier<CBaseForCLApply>;
|
||||
registerTypesClientPacks1(*applier);
|
||||
@ -710,15 +713,19 @@ void CClient::stopConnection()
|
||||
}
|
||||
}
|
||||
|
||||
if(connectionHandler)//end connection handler
|
||||
{
|
||||
if(connectionHandler->get_id() != boost::this_thread::get_id())
|
||||
connectionHandler->join();
|
||||
TLockGuard _(connectionHandlerMutex);
|
||||
if(connectionHandler)//end connection handler
|
||||
{
|
||||
if(connectionHandler->get_id() != boost::this_thread::get_id())
|
||||
connectionHandler->join();
|
||||
|
||||
logNetwork->infoStream() << "Connection handler thread joined";
|
||||
vstd::clear_pointer(connectionHandler);
|
||||
logNetwork->infoStream() << "Connection handler thread joined";
|
||||
connectionHandler.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (serv) //and delete connection
|
||||
{
|
||||
serv->close();
|
||||
|
@ -172,7 +172,8 @@ public:
|
||||
const CPathsInfo * getPathsInfo(const CGHeroInstance *h);
|
||||
|
||||
bool terminate; // tell to terminate
|
||||
boost::thread *connectionHandler; //thread running run() method
|
||||
std::unique_ptr<boost::thread> connectionHandler; //thread running run() method
|
||||
boost::mutex connectionHandlerMutex;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
virtual PlayerColor getLocalPlayer() const override;
|
||||
|
Loading…
Reference in New Issue
Block a user