From a44dc35353785c45c4c7eb870557f6675e5d73be Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 31 Mar 2020 03:50:42 -0400 Subject: [PATCH] Remote Connections shouldn't hold up shutdown Bugs in the connection logic appears to leave stale connections even, preventing shutdown --- .../server/dedicated/DedicatedServer.java.patch | 13 +++++++++++-- .../server/rcon/thread/RconThread.java.patch | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch b/paper-server/patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch index b21347294d..d671bef36b 100644 --- a/paper-server/patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -250,8 +250,17 @@ @Override public boolean isSpawningMonsters() { return this.settings.getProperties().spawnMonsters && super.isSpawningMonsters(); -@@ -293,6 +403,7 @@ - this.queryThreadGs4.stop(); +@@ -286,13 +396,14 @@ + } + + if (this.rconThread != null) { +- this.rconThread.stop(); ++ this.rconThread.stopNonBlocking(); // Paper - don't wait for remote connections + } + + if (this.queryThreadGs4 != null) { +- this.queryThreadGs4.stop(); ++ // this.remoteStatusListener.stop(); // Paper - don't wait for remote connections } + System.exit(0); // CraftBukkit diff --git a/paper-server/patches/sources/net/minecraft/server/rcon/thread/RconThread.java.patch b/paper-server/patches/sources/net/minecraft/server/rcon/thread/RconThread.java.patch index c7a9fb53cd..5bc2ff1f90 100644 --- a/paper-server/patches/sources/net/minecraft/server/rcon/thread/RconThread.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/rcon/thread/RconThread.java.patch @@ -9,3 +9,18 @@ if (string.isEmpty()) { string = "0.0.0.0"; } +@@ -104,6 +104,14 @@ + + this.clients.clear(); + } ++ // Paper start - don't wait for remote connections ++ public void stopNonBlocking() { ++ this.running = false; ++ for (RconClient client : this.clients) { ++ client.running = false; ++ } ++ } ++ // Paper end - don't wait for remote connections + + private void closeSocket(ServerSocket socket) { + LOGGER.debug("closeSocket: {}", socket);