PaperMC/Spigot-Server-Patches/0672-misc-debugging-dumps.patch

96 lines
4.7 KiB
Diff
Raw Normal View History

2021-02-23 22:06:12 +01:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Thu, 18 Feb 2021 20:23:28 +0000
Subject: [PATCH] misc debugging dumps
diff --git a/src/main/java/io/papermc/paper/util/TraceUtil.java b/src/main/java/io/papermc/paper/util/TraceUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d5494d2813b773e60ddba6790b750a9a08f21f8
2021-02-23 22:06:12 +01:00
--- /dev/null
+++ b/src/main/java/io/papermc/paper/util/TraceUtil.java
@@ -0,0 +1,18 @@
2021-02-23 22:06:12 +01:00
+package io.papermc.paper.util;
+
+import org.bukkit.Bukkit;
+
+public final class TraceUtil {
+
+ public static void dumpTraceForThread(Thread thread, String reason) {
+ Bukkit.getLogger().warning(thread.getName() + ": " + reason);
+ StackTraceElement[] trace = thread.getStackTrace();
+ for (StackTraceElement traceElement : trace) {
+ Bukkit.getLogger().warning("\tat " + traceElement);
+ }
+ }
+
+ public static void dumpTraceForThread(String reason) {
+ new Throwable(reason).printStackTrace();
+ }
2021-02-23 22:06:12 +01:00
+}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 454bc4c7b2e54a75dd0510263165e41cf26b1751..879074df54e56a9275957a83c92b467094e95cd4 100644
2021-02-23 22:06:12 +01:00
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -14,6 +14,7 @@ import io.netty.buffer.ByteBufOutputStream;
2021-02-23 22:06:12 +01:00
import io.netty.buffer.Unpooled;
import io.papermc.paper.adventure.PaperAdventure; // Paper
2021-02-23 22:06:12 +01:00
import io.papermc.paper.event.entity.EntityMoveEvent;
+import io.papermc.paper.util.TraceUtil;
import it.unimi.dsi.fastutil.longs.LongIterator;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
@@ -857,6 +858,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
2021-02-23 22:06:12 +01:00
// CraftBukkit start
private boolean hasStopped = false;
public volatile boolean hasFullyShutdown = false; // Paper
+ private boolean hasLoggedStop = false; // Paper
private final Object stopLock = new Object();
public final boolean hasStopped() {
synchronized (stopLock) {
@@ -871,6 +873,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
2021-02-23 22:06:12 +01:00
if (hasStopped) return;
hasStopped = true;
}
+ if (!hasLoggedStop && isDebugging()) TraceUtil.dumpTraceForThread("Server stopped"); // Paper
2021-02-23 22:06:12 +01:00
// Paper start - kill main thread, and kill it hard
shutdownThread = Thread.currentThread();
org.spigotmc.WatchdogThread.doStop(); // Paper
@@ -987,6 +990,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
2021-02-23 22:06:12 +01:00
public void safeShutdown(boolean flag, boolean isRestarting) {
this.isRunning = false;
this.isRestarting = isRestarting;
+ this.hasLoggedStop = true; // Paper
+ if (isDebugging()) TraceUtil.dumpTraceForThread("Server stopped"); // Paper
2021-02-23 22:06:12 +01:00
if (flag) {
try {
this.serverThread.join();
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 0f04ba41df95986b71524995738831223080cb88..a158abfe3c4bafa1594701123b0e8118069f7e2b 100644
2021-02-23 22:06:12 +01:00
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -18,6 +18,7 @@ import com.mojang.serialization.Lifecycle;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufOutputStream;
import io.netty.buffer.Unpooled;
+import io.papermc.paper.util.TraceUtil;
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
import java.awt.image.BufferedImage;
import java.io.File;
@@ -937,6 +938,7 @@ public final class CraftServer implements Server {
2021-02-23 22:06:12 +01:00
plugin.getDescription().getName(),
"This plugin is not properly shutting down its async tasks when it is being reloaded. This may cause conflicts with the newly loaded version of the plugin"
));
+ if (console.isDebugging()) TraceUtil.dumpTraceForThread(worker.getThread(), "still running"); // Paper
}
loadPlugins();
enablePlugins(PluginLoadOrder.STARTUP);
@@ -970,6 +972,7 @@ public final class CraftServer implements Server {
plugin.getDescription().getName(),
"This plugin is not properly shutting down its async tasks when it is being shut down. This task may throw errors during the final shutdown logs and might not complete before process dies."
));
+ if (console.isDebugging()) TraceUtil.dumpTraceForThread(worker.getThread(), "still running");
}
}
// Paper end