summaryrefslogtreecommitdiffstats
path: root/source/World.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/World.cpp')
-rw-r--r--source/World.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/source/World.cpp b/source/World.cpp
index 3f5e604bf..a573653d7 100644
--- a/source/World.cpp
+++ b/source/World.cpp
@@ -1599,13 +1599,19 @@ void cWorld::SetChunkData(
m_Generator.GenerateBiomes(a_ChunkX, a_ChunkZ, BiomeMap);
}
- m_ChunkMap->SetChunkData(
- a_ChunkX, a_ChunkY, a_ChunkZ,
- a_BlockTypes, a_BlockMeta, a_BlockLight, a_BlockSkyLight,
- a_HeightMap, *Biomes,
- a_Entities, a_BlockEntities,
- a_MarkDirty
- );
+ {
+ // _X: 2013_04_01: Hotfix for FS #347 - deadlock between the anvil loader thread and the tick thread
+ // By locking the entities here, we break one of the 3 conditions needed for the deadlock
+ cCSLock Lock(m_CSEntities);
+
+ m_ChunkMap->SetChunkData(
+ a_ChunkX, a_ChunkY, a_ChunkZ,
+ a_BlockTypes, a_BlockMeta, a_BlockLight, a_BlockSkyLight,
+ a_HeightMap, *Biomes,
+ a_Entities, a_BlockEntities,
+ a_MarkDirty
+ );
+ }
// If a client is requesting this chunk, send it to them:
if (m_ChunkMap->HasChunkAnyClients(a_ChunkX, a_ChunkY, a_ChunkZ))