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
This commit is contained in:
Aikar 2020-04-12 00:42:28 -04:00
parent bc17ce69d4
commit c65dcad3eb
No known key found for this signature in database
GPG Key ID: 401ADFC9891FAAFE
2 changed files with 4 additions and 20 deletions

View File

@ -1,4 +1,4 @@
From 8507a6807398fadc4ead7cc3c3089a62d36aec06 Mon Sep 17 00:00:00 2001
From 6e4b6c3681b093e95db973304a8cd0b04880cb76 Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
Date: Sat, 13 Jul 2019 09:23:10 -0700
Subject: [PATCH] Asynchronous chunk IO and loading
@ -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 +1,492 @@
@ -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();

View File

@ -1,26 +1,10 @@
From aa1a9266fcdeb4ffc727142df482ebca0d03828d Mon Sep 17 00:00:00 2001
From 659e3b03a4d6f5e691a516535bbff7b8bf52aba4 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 11 Apr 2020 21:23:42 -0400
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
@@ -490,8 +490,11 @@ 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