Don't process watchdog until server has fully started and ticked.

I think adjusting watchdog settings may of caused instant crashes.

Fixes #3209
This commit is contained in:
Aikar 2020-04-23 04:46:53 -04:00
parent 938bd97255
commit 3f4360296c
No known key found for this signature in database
GPG key ID: 401ADFC9891FAAFE

View file

@ -1,4 +1,4 @@
From f654ac6449eed39bcdfddca723938f7073e24d6d Mon Sep 17 00:00:00 2001
From 9366f4f3f725418e1e9533904d8eeda8fe4699a3 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sun, 12 Apr 2020 15:50:48 -0400
Subject: [PATCH] Forced Watchdog Crash support and Improve Async Shutdown
@ -36,7 +36,7 @@ We have to ensure Thread Death propagates correctly though to stop main complete
This is to ensure that if main isn't truely stuck, it's not manipulating state we are trying to save.
diff --git a/src/main/java/net/minecraft/server/CrashReport.java b/src/main/java/net/minecraft/server/CrashReport.java
index 3de19c99..c7dc8787 100644
index 3de19c998b..c7dc8787cc 100644
--- a/src/main/java/net/minecraft/server/CrashReport.java
+++ b/src/main/java/net/minecraft/server/CrashReport.java
@@ -257,6 +257,7 @@ public class CrashReport {
@ -48,7 +48,7 @@ index 3de19c99..c7dc8787 100644
throwable = throwable.getCause();
}
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
index 1ef7890d..e62ca054 100644
index 1ef7890da5..e62ca0543f 100644
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
@@ -750,7 +750,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
@ -61,7 +61,7 @@ index 1ef7890d..e62ca054 100644
@Override
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 7bfadb35..99bc8da3 100644
index 7bfadb35d2..f68494b030 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -144,6 +144,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
@ -113,14 +113,14 @@ index 7bfadb35..99bc8da3 100644
}
public String getServerIp() {
@@ -874,6 +891,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
// Spigot End
@@ -882,6 +899,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
this.a(this.serverPing);
public void run() {
+ boolean isThreadDeath = false; // Paper
try {
if (this.init()) {
this.nextTick = SystemUtils.getMonotonicMillis();
// Spigot start
+ org.spigotmc.WatchdogThread.tick(); // Paper
org.spigotmc.WatchdogThread.hasStarted = true; // Paper
Arrays.fill( recentTps, 20 );
long start = System.nanoTime(), curTime, tickSection = start; // Paper - Further improve server tick loop
@@ -938,6 +956,13 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
this.a((CrashReport) null);
}
@ -167,7 +167,7 @@ index 7bfadb35..99bc8da3 100644
}
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index dfe62515..160476fa 100644
index dfe6251576..160476fa29 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -398,7 +398,7 @@ public abstract class PlayerList {
@ -180,7 +180,7 @@ index dfe62515..160476fa 100644
// Paper start - Remove from collideRule team if needed
diff --git a/src/main/java/net/minecraft/server/SystemUtils.java b/src/main/java/net/minecraft/server/SystemUtils.java
index dc6d0306..bc8b9046 100644
index dc6d030621..bc8b904660 100644
--- a/src/main/java/net/minecraft/server/SystemUtils.java
+++ b/src/main/java/net/minecraft/server/SystemUtils.java
@@ -109,6 +109,7 @@ public class SystemUtils {
@ -192,7 +192,7 @@ index dc6d0306..bc8b9046 100644
SystemUtils.c.shutdown();
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index d554d4cf..46e19d91 100644
index d554d4cf0f..46e19d916c 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -786,6 +786,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@ -212,7 +212,7 @@ index d554d4cf..46e19d91 100644
String msg = "Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX() + "," + entity.locY() + "," + entity.locZ();
System.err.println(msg);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 8cc0f66c..dcc44be6 100644
index 8cc0f66ce5..dcc44be613 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1705,7 +1705,7 @@ public final class CraftServer implements Server {
@ -225,7 +225,7 @@ index 8cc0f66c..dcc44be6 100644
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java b/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java
index 449e99d1..899a5252 100644
index 449e99d1b6..899a525209 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java
@@ -12,12 +12,25 @@ public class ServerShutdownThread extends Thread {
@ -256,7 +256,7 @@ index 449e99d1..899a5252 100644
}
}
diff --git a/src/main/java/org/spigotmc/RestartCommand.java b/src/main/java/org/spigotmc/RestartCommand.java
index aefea3a9..123de5ac 100644
index aefea3a9a8..123de5ac90 100644
--- a/src/main/java/org/spigotmc/RestartCommand.java
+++ b/src/main/java/org/spigotmc/RestartCommand.java
@@ -139,7 +139,7 @@ public class RestartCommand extends Command
@ -269,7 +269,7 @@ index aefea3a9..123de5ac 100644
String[] split = restartScript.split( " " );
if ( split.length > 0 && new File( split[0] ).isFile() )
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
index 5bdcdcf9..acc880c7 100644
index 5bdcdcf9e8..963bd001f4 100644
--- a/src/main/java/org/spigotmc/WatchdogThread.java
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
@@ -67,12 +67,13 @@ public class WatchdogThread extends Thread
@ -278,7 +278,7 @@ index 5bdcdcf9..acc880c7 100644
long currentTime = monotonicMillis();
- if ( lastTick != 0 && currentTime > lastTick + earlyWarningEvery && !Boolean.getBoolean("disable.watchdog") )
+ MinecraftServer server = MinecraftServer.getServer();
+ if ( !server.isRunning() || (lastTick != 0 && currentTime > lastTick + earlyWarningEvery && !Boolean.getBoolean("disable.watchdog")) )
+ if (lastTick != 0 && hasStarted && (!server.isRunning() || (currentTime > lastTick + earlyWarningEvery && !Boolean.getBoolean("disable.watchdog")) ))
{
- boolean isLongTimeout = currentTime > lastTick + timeoutTime;
+ boolean isLongTimeout = currentTime > lastTick + timeoutTime || (!server.isRunning() && !server.hasStopped() && currentTime > lastTick + 1000);
@ -326,5 +326,5 @@ index 5bdcdcf9..acc880c7 100644
break;
} // Paper end
--
2.25.1.windows.1
2.25.1