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:
parent
938bd97255
commit
3f4360296c
|
@ -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>
|
From: Aikar <aikar@aikar.co>
|
||||||
Date: Sun, 12 Apr 2020 15:50:48 -0400
|
Date: Sun, 12 Apr 2020 15:50:48 -0400
|
||||||
Subject: [PATCH] Forced Watchdog Crash support and Improve Async Shutdown
|
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.
|
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
|
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
|
--- a/src/main/java/net/minecraft/server/CrashReport.java
|
||||||
+++ b/src/main/java/net/minecraft/server/CrashReport.java
|
+++ b/src/main/java/net/minecraft/server/CrashReport.java
|
||||||
@@ -257,6 +257,7 @@ public class CrashReport {
|
@@ -257,6 +257,7 @@ public class CrashReport {
|
||||||
|
@ -48,7 +48,7 @@ index 3de19c99..c7dc8787 100644
|
||||||
throwable = throwable.getCause();
|
throwable = throwable.getCause();
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
|
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
|
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||||
+++ b/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
|
@@ -750,7 +750,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
||||||
|
@ -61,7 +61,7 @@ index 1ef7890d..e62ca054 100644
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
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
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/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
|
@@ -144,6 +144,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||||
|
@ -113,14 +113,14 @@ index 7bfadb35..99bc8da3 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getServerIp() {
|
public String getServerIp() {
|
||||||
@@ -874,6 +891,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
@@ -882,6 +899,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||||
// Spigot End
|
this.a(this.serverPing);
|
||||||
|
|
||||||
public void run() {
|
// Spigot start
|
||||||
+ boolean isThreadDeath = false; // Paper
|
+ org.spigotmc.WatchdogThread.tick(); // Paper
|
||||||
try {
|
org.spigotmc.WatchdogThread.hasStarted = true; // Paper
|
||||||
if (this.init()) {
|
Arrays.fill( recentTps, 20 );
|
||||||
this.nextTick = SystemUtils.getMonotonicMillis();
|
long start = System.nanoTime(), curTime, tickSection = start; // Paper - Further improve server tick loop
|
||||||
@@ -938,6 +956,13 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
@@ -938,6 +956,13 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||||
this.a((CrashReport) null);
|
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
|
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
|
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||||
+++ b/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 {
|
@@ -398,7 +398,7 @@ public abstract class PlayerList {
|
||||||
|
@ -180,7 +180,7 @@ index dfe62515..160476fa 100644
|
||||||
|
|
||||||
// Paper start - Remove from collideRule team if needed
|
// 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
|
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
|
--- a/src/main/java/net/minecraft/server/SystemUtils.java
|
||||||
+++ b/src/main/java/net/minecraft/server/SystemUtils.java
|
+++ b/src/main/java/net/minecraft/server/SystemUtils.java
|
||||||
@@ -109,6 +109,7 @@ public class SystemUtils {
|
@@ -109,6 +109,7 @@ public class SystemUtils {
|
||||||
|
@ -192,7 +192,7 @@ index dc6d0306..bc8b9046 100644
|
||||||
SystemUtils.c.shutdown();
|
SystemUtils.c.shutdown();
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
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
|
--- a/src/main/java/net/minecraft/server/World.java
|
||||||
+++ b/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 {
|
@@ -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();
|
String msg = "Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX() + "," + entity.locY() + "," + entity.locZ();
|
||||||
System.err.println(msg);
|
System.err.println(msg);
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
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
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
+++ b/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 {
|
@@ -1705,7 +1705,7 @@ public final class CraftServer implements Server {
|
||||||
|
@ -225,7 +225,7 @@ index 8cc0f66c..dcc44be6 100644
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java b/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java
|
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
|
--- a/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java
|
||||||
+++ b/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 {
|
@@ -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
|
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
|
--- a/src/main/java/org/spigotmc/RestartCommand.java
|
||||||
+++ b/src/main/java/org/spigotmc/RestartCommand.java
|
+++ b/src/main/java/org/spigotmc/RestartCommand.java
|
||||||
@@ -139,7 +139,7 @@ public class RestartCommand extends Command
|
@@ -139,7 +139,7 @@ public class RestartCommand extends Command
|
||||||
|
@ -269,7 +269,7 @@ index aefea3a9..123de5ac 100644
|
||||||
String[] split = restartScript.split( " " );
|
String[] split = restartScript.split( " " );
|
||||||
if ( split.length > 0 && new File( split[0] ).isFile() )
|
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
|
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
|
--- a/src/main/java/org/spigotmc/WatchdogThread.java
|
||||||
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
|
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
|
||||||
@@ -67,12 +67,13 @@ public class WatchdogThread extends Thread
|
@@ -67,12 +67,13 @@ public class WatchdogThread extends Thread
|
||||||
|
@ -278,7 +278,7 @@ index 5bdcdcf9..acc880c7 100644
|
||||||
long currentTime = monotonicMillis();
|
long currentTime = monotonicMillis();
|
||||||
- if ( lastTick != 0 && currentTime > lastTick + earlyWarningEvery && !Boolean.getBoolean("disable.watchdog") )
|
- if ( lastTick != 0 && currentTime > lastTick + earlyWarningEvery && !Boolean.getBoolean("disable.watchdog") )
|
||||||
+ MinecraftServer server = MinecraftServer.getServer();
|
+ 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;
|
||||||
+ boolean isLongTimeout = currentTime > lastTick + timeoutTime || (!server.isRunning() && !server.hasStopped() && currentTime > lastTick + 1000);
|
+ boolean isLongTimeout = currentTime > lastTick + timeoutTime || (!server.isRunning() && !server.hasStopped() && currentTime > lastTick + 1000);
|
||||||
|
@ -326,5 +326,5 @@ index 5bdcdcf9..acc880c7 100644
|
||||||
break;
|
break;
|
||||||
} // Paper end
|
} // Paper end
|
||||||
--
|
--
|
||||||
2.25.1.windows.1
|
2.25.1
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue