Publicly execute the main thread at dawn

GH-684

Better handles most true deadlock situations
This commit is contained in:
Zach Brown 2017-05-13 05:51:09 -05:00
parent b0d78d461b
commit 2103c75247
No known key found for this signature in database
GPG key ID: CC9DA35FC5450B76
2 changed files with 33 additions and 7 deletions

View file

@ -1,11 +1,11 @@
From 3cd44a0e52ef2aa66f77783cd077eb6923ce0acc Mon Sep 17 00:00:00 2001
From 37f9f5c93bf615201883c1dc2daf4575865f440e Mon Sep 17 00:00:00 2001
From: kashike <kashike@vq.lc>
Date: Mon, 29 Feb 2016 19:48:59 -0600
Subject: [PATCH] Expose server CommandMap
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 3b16953..07077ec 100644
index 3b16953a..07077ec4 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -17,10 +17,7 @@ import org.bukkit.boss.BarColor;
@ -39,7 +39,7 @@ index 3b16953..07077ec 100644
{
return server.spigot();
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index a4e6894..4463ab3 100644
index a4e68943..4463ab33 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -17,10 +17,7 @@ import org.bukkit.boss.BarColor;
@ -70,5 +70,5 @@ index a4e6894..4463ab3 100644
* @see UnsafeValues
* @return the unsafe values instance
--
2.9.3
2.13.0.windows.1

View file

@ -1,11 +1,37 @@
From 707945410e0af095ceb20fde3ce0eaf085c36c8c Mon Sep 17 00:00:00 2001
From 2aa53ac9f67c953bdeac7f66834cdf8fb343799d Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
Date: Fri, 12 May 2017 23:34:11 -0500
Subject: [PATCH] Properly handle async calls to restart the server
The watchdog thread calls the server restart function asynchronously. Prior to
this change, it attempted to do several non-safe operations from the watchdog
thread, rather than the main. Specifically, because of a separate upstream change,
it causes player entities to be ticked asynchronously, among other things.
This is dangerous.
This patch moves the old handling into a synchronous variant, for calls from the
restart command, and adds separate handling for async calls, such as those from
the watchdog thread.
When calling from the watchdog thread, we cannot assume the main thread is in a
tickable state; it may be completely deadlocked. Therefore, we kill that thread
right then and there.
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 8df30e3d0..df3077c9d 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1630,6 +1630,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
return this.ab;
}
+ public final Thread getServerThread() { return this.aI(); } // Paper - OBFHELPER
public Thread aI() {
return this.serverThread;
}
diff --git a/src/main/java/org/spigotmc/RestartCommand.java b/src/main/java/org/spigotmc/RestartCommand.java
index 49768734d..2361f96d0 100644
index 49768734d..35c828805 100644
--- a/src/main/java/org/spigotmc/RestartCommand.java
+++ b/src/main/java/org/spigotmc/RestartCommand.java
@@ -52,36 +52,7 @@ public class RestartCommand extends Command
@ -81,7 +107,7 @@ index 49768734d..2361f96d0 100644
+ } else
+ {
+ closeSocket();
+ MinecraftServer.getServer().safeShutdown();
+ MinecraftServer.getServer().getServerThread().stop();
+ }
+ }
+