Преглед на файлове

More locks to avoid data races on server

Ivan Savenko преди 2 години
родител
ревизия
4b307dc0e4
променени са 2 файла, в които са добавени 8 реда и са изтрити 0 реда
  1. 2 0
      server/CGameHandler.cpp
  2. 6 0
      server/NetPacksServer.cpp

+ 2 - 0
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;

+ 6 - 0
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);