aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAikar <[email protected]>2016-11-04 01:33:08 -0400
committerAikar <[email protected]>2016-11-04 01:33:08 -0400
commitab7b7d8072d913a4e4676b2c305727dd6979a749 (patch)
tree15cf6ab78cf5a0a76501e409041137cb43f95652
parent4f5d91198f2be3f5a1ea35f4208f4de5af3a3020 (diff)
downloadPaper-ab7b7d8072d913a4e4676b2c305727dd6979a749.tar.gz
Paper-ab7b7d8072d913a4e4676b2c305727dd6979a749.zip
Don't process auto save if the save queue is filled
This avoids ever growing pending NBT objects which eat up memory.
-rw-r--r--Spigot-Server-Patches/0180-Auto-Save-Cap.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0180-Auto-Save-Cap.patch b/Spigot-Server-Patches/0180-Auto-Save-Cap.patch
new file mode 100644
index 0000000000..255675190b
--- /dev/null
+++ b/Spigot-Server-Patches/0180-Auto-Save-Cap.patch
@@ -0,0 +1,48 @@
+From 5b011605906059b3d7fbd31206ba146c866300ea Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Thu, 3 Nov 2016 21:52:22 -0400
+Subject: [PATCH] Auto Save Cap
+
+
+diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
+index 7e53fee..0f529e6 100644
+--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
+@@ -253,6 +253,13 @@ public class ChunkProviderServer implements IChunkProvider {
+ int i = 0;
+
+ // CraftBukkit start
++ // Paper start
++ final ChunkRegionLoader chunkLoader = (ChunkRegionLoader) world.getChunkProviderServer().chunkLoader;
++ final int autoSaveLimit = world.paperConfig.maxAutoSaveChunksPerTick - chunkLoader.getQueueSize();
++ if (autoSaveLimit < 1) {
++ return false;
++ }
++ // Paper end
+ Iterator iterator = this.chunks.values().iterator();
+ while (iterator.hasNext()) {
+ Chunk chunk = (Chunk) iterator.next();
+@@ -266,7 +273,7 @@ public class ChunkProviderServer implements IChunkProvider {
+ this.saveChunk(chunk);
+ chunk.f(false);
+ ++i;
+- if (!flag && i >= world.paperConfig.maxAutoSaveChunksPerTick) { // Spigot - // Paper - Incremental Auto Save - cap max per tick
++ if (!flag && i >= autoSaveLimit) { // Spigot - // Paper - Incremental Auto Save - cap max per tick
+ return false;
+ }
+ }
+diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+index b672a38..70e71cc 100644
+--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
++++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+@@ -33,6 +33,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
+ }
+
+ // CraftBukkit start
++ public int getQueueSize() { return queue.size(); } // Paper
+ public boolean chunkExists(World world, int i, int j) {
+ ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j);
+
+--
+2.10.2
+