diff --git a/patches/server/0878-Fix-deadlock-on-watchdog-crash.patch b/patches/server/0878-Fix-deadlock-on-watchdog-crash.patch deleted file mode 100644 index 7839535587..0000000000 --- a/patches/server/0878-Fix-deadlock-on-watchdog-crash.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> -Date: Fri, 4 Mar 2022 00:12:49 -0700 -Subject: [PATCH] Fix deadlock on watchdog crash - -The watchdog thread sets MinecraftServer#forceTicks to true which will -cause waitUntilNextTick to hang when the task queue is drained. - -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 17e87875a95495940899b862eabf98b3d6a365da..07c382f30ed3736ed15b5b71f48dc4a1de958242 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1012,7 +1012,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop !this.canSleepForTickNoOversleep() || this.getPendingTasksCount() == 0); // Paper - based on waitUntilNextTick - } - - this.saveAllChunks(false, true, false); diff --git a/patches/server/0879-Fix-falling-block-spawn-methods.patch b/patches/server/0878-Fix-falling-block-spawn-methods.patch similarity index 100% rename from patches/server/0879-Fix-falling-block-spawn-methods.patch rename to patches/server/0878-Fix-falling-block-spawn-methods.patch diff --git a/patches/server/0880-Expose-furnace-minecart-push-values.patch b/patches/server/0879-Expose-furnace-minecart-push-values.patch similarity index 100% rename from patches/server/0880-Expose-furnace-minecart-push-values.patch rename to patches/server/0879-Expose-furnace-minecart-push-values.patch diff --git a/patches/server/0881-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch b/patches/server/0880-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch similarity index 100% rename from patches/server/0881-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch rename to patches/server/0880-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch diff --git a/patches/server/0881-Fix-save-problems-on-shutdown.patch b/patches/server/0881-Fix-save-problems-on-shutdown.patch new file mode 100644 index 0000000000..bb39b0fdd8 --- /dev/null +++ b/patches/server/0881-Fix-save-problems-on-shutdown.patch @@ -0,0 +1,59 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +Date: Sat, 5 Mar 2022 17:12:52 -0800 +Subject: [PATCH] Fix save problems on shutdown + +- Save level.dat first, in case the shutdown is killed later +- Force run minecraftserver tasks and the chunk source tasks + while waiting for the chunk system to empty, as there's simply + too much trash that could prevent them from executing during + the chunk source tick (i.e "time left in tick" logic). + +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 17e87875a95495940899b862eabf98b3d6a365da..e25c9a9ccab67a018c2e58e13b24089bc2ce538f 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -998,6 +998,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + return worldserver1.getChunkSource().chunkMap.hasWork(); + })) { +@@ -1010,9 +1017,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + return true; + }, false); ++ while (worldserver.getChunkSource().pollTask()); // Paper - drain tasks + } + +- this.waitUntilNextTick(); ++ while (this.pollTask()); // Paper - drain tasks + } + + this.saveAllChunks(false, true, false); +diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java +index b5b56d4549e97abbbe9e91d881b9bca8428f1eec..dce7452d58d6081f1a83baddafb1596ebd423d21 100644 +--- a/src/main/java/net/minecraft/server/level/ServerLevel.java ++++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +@@ -1258,7 +1258,13 @@ public class ServerLevel extends Level implements WorldGenLevel { + } + + } ++ // Paper start ++ this.saveLevelDat(); ++ } + ++ public void saveLevelDat() { ++ this.saveLevelData(); ++ // Paper end + // CraftBukkit start - moved from MinecraftServer.saveChunks + ServerLevel worldserver1 = this; +