diff options
author | worktycho <work.tycho@gmail.com> | 2015-10-04 15:55:42 +0200 |
---|---|---|
committer | worktycho <work.tycho@gmail.com> | 2015-10-04 15:55:42 +0200 |
commit | 0786fda18b08ee26a9bdcda7b17ef9979be4585a (patch) | |
tree | 06ae98c7848c29b812b50b91ab4b2cbb49cd6e13 /src/WorldStorage | |
parent | Merge pull request #2519 from cuberite/RemoveStyleCheckFromTravis (diff) | |
parent | Fixed a race condition between chunk loader and generator. (diff) | |
download | cuberite-0786fda18b08ee26a9bdcda7b17ef9979be4585a.tar cuberite-0786fda18b08ee26a9bdcda7b17ef9979be4585a.tar.gz cuberite-0786fda18b08ee26a9bdcda7b17ef9979be4585a.tar.bz2 cuberite-0786fda18b08ee26a9bdcda7b17ef9979be4585a.tar.lz cuberite-0786fda18b08ee26a9bdcda7b17ef9979be4585a.tar.xz cuberite-0786fda18b08ee26a9bdcda7b17ef9979be4585a.tar.zst cuberite-0786fda18b08ee26a9bdcda7b17ef9979be4585a.zip |
Diffstat (limited to 'src/WorldStorage')
-rw-r--r-- | src/WorldStorage/WorldStorage.cpp | 32 | ||||
-rw-r--r-- | src/WorldStorage/WorldStorage.h | 10 |
2 files changed, 10 insertions, 32 deletions
diff --git a/src/WorldStorage/WorldStorage.cpp b/src/WorldStorage/WorldStorage.cpp index 19fc2be56..3a2385848 100644 --- a/src/WorldStorage/WorldStorage.cpp +++ b/src/WorldStorage/WorldStorage.cpp @@ -164,32 +164,6 @@ void cWorldStorage::QueueSaveChunk(int a_ChunkX, int a_ChunkZ, cChunkCoordCallba -void cWorldStorage::UnqueueLoad(int a_ChunkX, int a_ChunkZ) -{ - m_LoadQueue.RemoveIf([=](cChunkCoordsWithCallback & a_Item) - { - return (a_Item.m_ChunkX == a_ChunkX) && (a_Item.m_ChunkZ == a_ChunkZ); - } - ); -} - - - - - -void cWorldStorage::UnqueueSave(const cChunkCoords & a_Chunk) -{ - m_SaveQueue.RemoveIf([=](cChunkCoordsWithCallback & a_Item) - { - return (a_Item.m_ChunkX == a_Chunk.m_ChunkX) && (a_Item.m_ChunkZ == a_Chunk.m_ChunkZ); - } - ); -} - - - - - void cWorldStorage::InitSchemas(int a_StorageCompressionFactor) { // The first schema added is considered the default @@ -266,7 +240,7 @@ bool cWorldStorage::LoadOneChunk(void) // Call the callback, if specified: if (ToLoad.m_Callback != nullptr) { - ToLoad.m_Callback->Call(ToLoad.m_ChunkX, ToLoad.m_ChunkZ); + ToLoad.m_Callback->Call(ToLoad.m_ChunkX, ToLoad.m_ChunkZ, res); } return res; } @@ -286,19 +260,21 @@ bool cWorldStorage::SaveOneChunk(void) } // Save the chunk, if it's valid: + bool Status = false; if (m_World->IsChunkValid(ToSave.m_ChunkX, ToSave.m_ChunkZ)) { m_World->MarkChunkSaving(ToSave.m_ChunkX, ToSave.m_ChunkZ); if (m_SaveSchema->SaveChunk(cChunkCoords(ToSave.m_ChunkX, ToSave.m_ChunkZ))) { m_World->MarkChunkSaved(ToSave.m_ChunkX, ToSave.m_ChunkZ); + Status = true; } } // Call the callback, if specified: if (ToSave.m_Callback != nullptr) { - ToSave.m_Callback->Call(ToSave.m_ChunkX, ToSave.m_ChunkZ); + ToSave.m_Callback->Call(ToSave.m_ChunkX, ToSave.m_ChunkZ, Status); } return true; } diff --git a/src/WorldStorage/WorldStorage.h b/src/WorldStorage/WorldStorage.h index 70cca9031..ab8a7f44b 100644 --- a/src/WorldStorage/WorldStorage.h +++ b/src/WorldStorage/WorldStorage.h @@ -63,13 +63,15 @@ public: cWorldStorage(void); ~cWorldStorage(); - + + /** Queues a chunk to be loaded, asynchronously. + The callback, if specified, will be called with the result of the load operation. */ void QueueLoadChunk(int a_ChunkX, int a_ChunkZ, cChunkCoordCallback * a_Callback = nullptr); + + /** Queues a chunk to be saved, asynchronously. + The callback, if specified, will be called with the result of the save operation. */ void QueueSaveChunk(int a_ChunkX, int a_ChunkZ, cChunkCoordCallback * a_Callback = nullptr); - void UnqueueLoad(int a_ChunkX, int a_ChunkZ); - void UnqueueSave(const cChunkCoords & a_Chunk); - bool Start(cWorld * a_World, const AString & a_StorageSchemaName, int a_StorageCompressionFactor); // Hide the cIsThread's Start() method, we need to provide args void Stop(void); // Hide the cIsThread's Stop() method, we need to signal the event void WaitForFinish(void); |