From c538cdbbd250ad56d5c59199f15f4050db599b3a Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Wed, 17 Jun 2026 21:13:57 +0200 Subject: [PATCH] Implement proper stop and not sleep on BauCommand.stop --- .../src/de/steamwar/persistent/Subserver.java | 33 ++++++++++++++++--- .../steamwar/velocitycore/ServerStarter.java | 2 +- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java index 26e60b21..88902b9a 100644 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java +++ b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java @@ -80,7 +80,7 @@ public class Subserver { static void shutdown() { while (!serverList.isEmpty()) { Subserver server = serverList.get(0); - server.stop(); + server.sleep(); } } @@ -138,7 +138,7 @@ public class Subserver { writer.println(command); } - public void stop() { + public void sleep() { try { long pid = process.pid(); if (checkpoint) { @@ -152,9 +152,32 @@ public class Subserver { try { if (!process.waitFor(1, TimeUnit.MINUTES)) { - logger.log(Level.SEVERE, () -> serverName + " did not stop correctly, forcibly stopping!"); - process.destroyForcibly(); + forceStop(); } + } catch (InterruptedException e) { + logger.log(Level.SEVERE, "Subserver stop interrupted!", e); + Thread.currentThread().interrupt(); + } + } + + public void stop() { + try { + process.destroy(); + if (!process.waitFor(1, TimeUnit.MINUTES)) { + forceStop(); + } else if (thread.isAlive()) { + thread.join(); + } + } catch (InterruptedException e) { + logger.log(Level.SEVERE, "Subserver stop interrupted!", e); + Thread.currentThread().interrupt(); + } + } + + public void forceStop() { + try { + logger.log(Level.SEVERE, () -> serverName + " did not stop correctly, forcibly stopping!"); + process.destroyForcibly(); if (thread.isAlive()) thread.join(); } catch (InterruptedException e) { @@ -196,7 +219,7 @@ public class Subserver { protected void register() { if (Persistent.getInstance().getProxy().getServer(serverName).isPresent()) { SecurityException e = new SecurityException("Server already registered: " + serverName); - stop(); + sleep(); failureCallback.accept(e); throw e; } diff --git a/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java b/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java index 64e8705b..087a121d 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java +++ b/VelocityCore/src/de/steamwar/velocitycore/ServerStarter.java @@ -213,7 +213,7 @@ public class ServerStarter { if (startingBau(owner)) return false; Bauserver subserver = Bauserver.get(owner.getUniqueId()); - if (subserver != null && subserver.isStarted()) subserver.stop(); + if (subserver != null && subserver.isStarted()) subserver.sleep(); return !startingBau(owner); };