浏览代码

Fixed deadlock in WaterAdopter

Tomasz Zieliński 2 年之前
父节点
当前提交
72f8facc82
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      lib/rmg/WaterAdopter.cpp

+ 4 - 2
lib/rmg/WaterAdopter.cpp

@@ -35,7 +35,6 @@ void WaterAdopter::process()
 void WaterAdopter::init()
 {
 	//make dependencies
-	DEPENDENCY_ALL(WaterAdopter);
 	DEPENDENCY(TownPlacer);
 	POSTFUNCTION(ConnectionsPlacer);
 	POSTFUNCTION(TreasurePlacer);
@@ -224,7 +223,10 @@ void WaterAdopter::createWater(EWaterContent::EWaterContent waterContent)
 		}
 	}
 	
-	map.getZones()[waterZoneId]->area().unite(waterArea);
+	{
+		Zone::Lock waterLock(map.getZones()[waterZoneId]->areaMutex);
+		map.getZones()[waterZoneId]->area().unite(waterArea);
+	}
 	Zone::Lock lock(zone.areaMutex);
 	zone.area().subtract(waterArea);
 	zone.areaPossible().subtract(waterArea);