From 9da404ea2db52dd4a5d9d0a5ca1736fd7e2e10bf Mon Sep 17 00:00:00 2001 From: Mattes D Date: Sun, 4 Oct 2015 14:06:37 +0200 Subject: Fixed a race condition between chunk loader and generator. When using ChunkWorx to generate multiple chunks, the server would sometimes fail an assert because it would generate a chunk even when it was successfully loaded. This was caused by chunks queued in cWorld's m_SetChunkDataQueue and thus being marked as "InQueue" although they were already loaded. Solved by adding a new parameter to chunk coord callbacks specifying whether the operation succeeded or failed, and using that instead of the chunk presence flag to decide whether to generate or not. --- src/LightingThread.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/LightingThread.h') diff --git a/src/LightingThread.h b/src/LightingThread.h index b18ac7799..138c40002 100644 --- a/src/LightingThread.h +++ b/src/LightingThread.h @@ -60,7 +60,8 @@ public: void Stop(void); - /** Queues the entire chunk for lighting */ + /** Queues the entire chunk for lighting. + The callback, if specified, is called after the lighting has been processed. */ void QueueChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr a_CallbackAfter); /** Blocks until the queue is empty or the thread is terminated */ -- cgit v1.2.3