13
0
geforkt von Mirrors/Paper

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
Dieser Commit ist enthalten in:
Aikar 2020-04-12 00:42:28 -04:00
Ursprung 5fc72e41c0
Commit cb8f1dcc40
2 geänderte Dateien mit 2 neuen und 18 gelöschten Zeilen

Datei anzeigen

@ -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();

Datei anzeigen

@ -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