diff options
-rw-r--r-- | src/Root.cpp | 12 | ||||
-rw-r--r-- | src/Root.h | 3 | ||||
-rw-r--r-- | src/Server.cpp | 3 |
3 files changed, 17 insertions, 1 deletions
diff --git a/src/Root.cpp b/src/Root.cpp index b90a229c9..b3712a687 100644 --- a/src/Root.cpp +++ b/src/Root.cpp @@ -577,6 +577,18 @@ void cRoot::SaveAllChunks(void) +void cRoot::SaveAllChunksNow(void) +{ + for (auto & Entry : m_WorldsByName) + { + Entry.second.SaveAllChunks(); + } +} + + + + + void cRoot::SetSavingEnabled(bool a_SavingEnabled) { for (auto & Entry : m_WorldsByName) diff --git a/src/Root.h b/src/Root.h index 1f5354c71..6ec8e5481 100644 --- a/src/Root.h +++ b/src/Root.h @@ -140,6 +140,9 @@ public: /** Saves all chunks in all worlds */ void SaveAllChunks(void); // tolua_export + /** Saves all chunks in all worlds synchronously (waits until dirty chunks have been sent to the ChunkStorage queue before returning) */ + void SaveAllChunksNow(void); + /** Sets whether saving chunks is enabled in all worlds (overrides however the worlds were already set) */ void SetSavingEnabled(bool a_SavingEnabled); // tolua_export diff --git a/src/Server.cpp b/src/Server.cpp index a1dedf333..67629ef2c 100644 --- a/src/Server.cpp +++ b/src/Server.cpp @@ -648,7 +648,8 @@ void cServer::Shutdown(void) // Notify the tick thread and wait for it to terminate: m_TickThread.Stop(); - cRoot::Get()->SaveAllChunks(); + // Save all chunks in all worlds, wait for chunks to be sent to the ChunkStorage queue for each world: + cRoot::Get()->SaveAllChunksNow(); // Remove all clients: cCSLock Lock(m_CSClients); |