mirror of https://github.com/YatopiaMC/Yatopia.git
43 lines
2.6 KiB
Diff
43 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
|
Date: Thu, 10 Dec 2020 15:18:05 -0800
|
|
Subject: [PATCH] Improve abnormal server shutdown process
|
|
|
|
- When we're trying to kill the main thread from watchdog,
|
|
step up the stop() spamming after 15s to really kill the main thread.
|
|
|
|
- Do not wait for window disposing when disposing of the server
|
|
gui. It looks like during sigint shutdown there can be some
|
|
deadlock between the server thread and awt shutdown thread here.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 29677908376e111abead33b42920e07aeb1d4b02..7b0b416c73c8914f3c8c570f2020490ef2babf64 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -878,10 +878,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
org.spigotmc.WatchdogThread.doStop(); // Paper
|
|
if (!isMainThread()) {
|
|
MinecraftServer.LOGGER.info("Stopping main thread (Ignore any thread death message you see! - DO NOT REPORT THREAD DEATH TO PAPER)");
|
|
+ long start = System.nanoTime(); // Tuinity - really try hard to kill the main thread
|
|
while (this.getThread().isAlive()) {
|
|
this.getThread().stop();
|
|
try {
|
|
- Thread.sleep(1);
|
|
+ if ((System.nanoTime() - start) <= (15L * 1000L * 1000L * 1000L)) Thread.sleep(1); // Tuinity - really try hard to kill the main thread - if we're past 15s we're probably in a terrible loop, spam it to really kill it
|
|
} catch (InterruptedException e) {}
|
|
}
|
|
// We've just obliterated the main thread, this will prevent stop from dying when removing players
|
|
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
index d0cfc0053c9f49406a31de983e4980da8f8643d6..d902efdb8f2d42ea4c3933f7fa76ebe135ee09db 100644
|
|
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
|
@@ -399,7 +399,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
}
|
|
|
|
if (this.q != null) {
|
|
- this.q.b();
|
|
+ //this.q.b(); // Tuinity - do not wait for AWT, causes deadlock with sigint handler (AWT shutdown will properly clear our resources anyways)
|
|
}
|
|
|
|
if (this.remoteControlListener != null) {
|