From cb8f1dcc403e5d9babdaec6c488955d539cf6cfe Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 12 Apr 2020 00:42:28 -0400 Subject: [PATCH] Don't delay chunk unloads during entity ticking Leaf informed me this could cause ordering issues. So, the risk if this occurring is lowered now anyways, but if an entity causes a sync chunk load, it could process an unload... We will tackle the problem better in a future commit Also fixed another async-chunks=false issue --- .../Asynchronous-chunk-IO-and-loading.patch | 4 ++-- ...actions-until-after-entity-ticking-is-d.patch | 16 ---------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch index e3d893ac9b..df709c3a32 100644 --- a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch +++ b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch @@ -1902,7 +1902,7 @@ index 0000000000..1dfa8abfd8 +} diff --git a/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java new file mode 100644 -index 0000000000..ff19d38f82 +index 0000000000..0745a2015a --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java @@ -0,0 +0,0 @@ @@ -2297,7 +2297,7 @@ index 0000000000..ff19d38f82 + worker.flush(); + } + } -+ globalUrgentWorker.flush(); ++ if (globalUrgentWorker != null) globalUrgentWorker.flush(); + + // flush again since tasks we execute async saves + drainChunkWaitQueue(); diff --git a/Spigot-Server-Patches/Delay-unsafe-actions-until-after-entity-ticking-is-d.patch b/Spigot-Server-Patches/Delay-unsafe-actions-until-after-entity-ticking-is-d.patch index 2725912fd0..ff1456b690 100644 --- a/Spigot-Server-Patches/Delay-unsafe-actions-until-after-entity-ticking-is-d.patch +++ b/Spigot-Server-Patches/Delay-unsafe-actions-until-after-entity-ticking-is-d.patch @@ -5,22 +5,6 @@ Subject: [PATCH] Delay unsafe actions until after entity ticking is done This will help prevent many cases of unregistering entities during entity ticking -diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java -index a9a2ce3d3f..24cb88559b 100644 ---- a/src/main/java/net/minecraft/server/PlayerChunk.java -+++ b/src/main/java/net/minecraft/server/PlayerChunk.java -@@ -0,0 +0,0 @@ public class PlayerChunk { - // Minecraft will apply the chunks tick lists to the world once the chunk got loaded, and then store the tick - // lists again inside the chunk once the chunk becomes inaccessible and set the chunk's needsSaving flag. - // These actions may however happen deferred, so we manually set the needsSaving flag already here. -+ // Paper start -+ ((WorldServer) chunk.world).doIfNotEntityTicking(() -> { // Paper - chunk.setNeedsSaving(true); - chunk.unloadCallback(); -+ }); // Paper - }); - } - }).exceptionally((throwable) -> { diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index cd8266f675..84a3367b87 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java