Hotfix for FS #347.

This is not meant to be a permanent solution, but should provide insight into why the issue happens.

git-svn-id: http://mc-server.googlecode.com/svn/trunk@1347 0a769ca7-a7f5-676a-18bf-c427514a06d6
master
madmaxoft@gmail.com 2013-04-01 18:24:05 +00:00
parent 1406d80b2b
commit 47b9f6d941
1 changed files with 13 additions and 7 deletions

View File

@ -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))