diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 3cb0f5655..3599c399a 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -6464,6 +6464,8 @@ void CGameHandler::runBattle() bool CGameHandler::makeAutomaticAction(const CStack *stack, BattleAction &ba) { + boost::unique_lock lock(battleActionMutex); + BattleSetActiveStack bsa; bsa.stack = stack->unitId(); bsa.askPlayerInterface = false; diff --git a/server/NetPacksServer.cpp b/server/NetPacksServer.cpp index f2f37e4a4..7660bc073 100644 --- a/server/NetPacksServer.cpp +++ b/server/NetPacksServer.cpp @@ -25,6 +25,8 @@ #include "../lib/spells/ISpellMechanics.h" #include "../lib/serializer/Cast.h" +extern boost::recursive_mutex battleActionMutex; + void ApplyGhNetPackVisitor::visitSaveGame(SaveGame & pack) { gh.save(pack.fname); @@ -280,6 +282,8 @@ void ApplyGhNetPackVisitor::visitQueryReply(QueryReply & pack) void ApplyGhNetPackVisitor::visitMakeAction(MakeAction & pack) { + boost::unique_lock lock(battleActionMutex); + const BattleInfo * b = gs.curB; if(!b) gh.throwAndComplain(&pack, "Can not make action - there is no battle ongoing!"); @@ -307,6 +311,8 @@ void ApplyGhNetPackVisitor::visitMakeAction(MakeAction & pack) void ApplyGhNetPackVisitor::visitMakeCustomAction(MakeCustomAction & pack) { + boost::unique_lock lock(battleActionMutex); + const BattleInfo * b = gs.curB; if(!b) gh.throwNotAllowedAction(&pack);