aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--LICENSE.md1
-rw-r--r--Spigot-Server-Patches/0349-Add-5-second-short-dumps-to-watchdog.patch87
2 files changed, 88 insertions, 0 deletions
diff --git a/LICENSE.md b/LICENSE.md
index 1bb8996e25..65621ad0ed 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -36,4 +36,5 @@ stonar96 <[email protected]>
Hugo Manrique <[email protected]>
Andrew Steinborn <[email protected]>
willies952002 <[email protected]>
+MicleBrick <[email protected]>
```
diff --git a/Spigot-Server-Patches/0349-Add-5-second-short-dumps-to-watchdog.patch b/Spigot-Server-Patches/0349-Add-5-second-short-dumps-to-watchdog.patch
new file mode 100644
index 0000000000..63dfe16f0e
--- /dev/null
+++ b/Spigot-Server-Patches/0349-Add-5-second-short-dumps-to-watchdog.patch
@@ -0,0 +1,87 @@
+From a30613e82fe3e0e0759e03c7d6b4b69d60e005f0 Mon Sep 17 00:00:00 2001
+From: miclebrick <[email protected]>
+Date: Wed, 8 Aug 2018 15:30:52 -0400
+Subject: [PATCH] Add 5 second short dumps to watchdog
+
+
+diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
+index 57a4748a3..815c3e664 100644
+--- a/src/main/java/org/spigotmc/WatchdogThread.java
++++ b/src/main/java/org/spigotmc/WatchdogThread.java
+@@ -13,8 +13,10 @@ public class WatchdogThread extends Thread
+
+ private static WatchdogThread instance;
+ private final long timeoutTime;
++ private final long shortTimeout; // Paper - Timeout time for just printing a dump but not restarting
+ private final boolean restart;
+ private volatile long lastTick;
++ private long lastShortDump; // Paper - Keep track of short dump times to avoid spamming console with short dumps
+ private volatile boolean stopping;
+
+ private WatchdogThread(long timeoutTime, boolean restart)
+@@ -22,6 +24,7 @@ public class WatchdogThread extends Thread
+ super( "Paper Watchdog Thread" );
+ this.timeoutTime = timeoutTime;
+ this.restart = restart;
++ shortTimeout = Math.min(5000, timeoutTime); // Paper - Make short timeout the lower of 5 seconds, and timeout time
+ }
+
+ public static void doStart(int timeoutTime, boolean restart)
+@@ -52,9 +55,19 @@ public class WatchdogThread extends Thread
+ while ( !stopping )
+ {
+ //
+- if ( lastTick != 0 && System.currentTimeMillis() > lastTick + timeoutTime && !Boolean.getBoolean("disable.watchdog")) // Paper - Add property to disable
++ long currentTime = System.currentTimeMillis(); // Paper - do we REALLY need to call this method multiple times?
++ if ( lastTick != 0 && currentTime > lastTick + shortTimeout && !Boolean.getBoolean("disable.watchdog") ) // Paper - Add property to disable and short timeout
+ {
++ // Paper start
++ boolean isLongTimeout = currentTime > lastTick + timeoutTime;
++ // Don't spam short dumps
++ if ( !isLongTimeout && currentTime < lastShortDump + shortTimeout ) continue;
++ lastShortDump = currentTime;
++ // Paper end
+ Logger log = Bukkit.getServer().getLogger();
++ // Paper start - Different message when it's a short timeout
++ if ( isLongTimeout )
++ {
+ log.log( Level.SEVERE, "The server has stopped responding!" );
+ log.log( Level.SEVERE, "Please report this to https://github.com/PaperMC/Paper/issues" );
+ log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" );
+@@ -79,11 +92,19 @@ public class WatchdogThread extends Thread
+ }
+ }
+ // Paper end
++ } else
++ {
++ log.log( Level.SEVERE, "The server has not responded for " + shortTimeout / 1000 + " seconds! Creating thread dump");
++ }
++ // Paper end - Different message for short timeout
+ log.log( Level.SEVERE, "------------------------------" );
+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" );
+ dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().primaryThread.getId(), Integer.MAX_VALUE ), log );
+ log.log( Level.SEVERE, "------------------------------" );
+ //
++ // Paper start - Only print full dump on long timeouts
++ if ( isLongTimeout )
++ {
+ log.log( Level.SEVERE, "Entire Thread Dump:" );
+ ThreadInfo[] threads = ManagementFactory.getThreadMXBean().dumpAllThreads( true, true );
+ for ( ThreadInfo thread : threads )
+@@ -97,11 +118,12 @@ public class WatchdogThread extends Thread
+ RestartCommand.restart();
+ }
+ break;
++ } // Paper end
+ }
+
+ try
+ {
+- sleep( 10000 );
++ sleep( 1000 ); // Paper - Reduce check time to every second instead of every ten seconds, more consistent and allows for short timeout
+ } catch ( InterruptedException ex )
+ {
+ interrupt();
+--
+2.18.0
+