From 8401f67b24819d2211e29f785dab4acc9ff20469 Mon Sep 17 00:00:00 2001 From: Hut512 Date: Thu, 3 Sep 2026 02:20:43 +0200 Subject: [PATCH] Fix CRIU subserver stop --- .../src/de/steamwar/persistent/Subserver.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java index 88902b9a..711bab09 100644 --- a/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java +++ b/VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java @@ -138,14 +138,16 @@ public class Subserver { writer.println(command); } + private ProcessHandle serverProcess() { + if (checkpoint) { + return process.children().findAny().orElseGet(process::toHandle); + } + return process.toHandle(); + } + public void sleep() { try { - long pid = process.pid(); - if (checkpoint) { - pid = process.children().findAny().map(ProcessHandle::pid).orElse(pid); - } - - Runtime.getRuntime().exec(new String[]{"kill", "-SIGUSR1", Long.toString(pid)}); + Runtime.getRuntime().exec(new String[]{"kill", "-SIGUSR1", Long.toString(serverProcess().pid())}); } catch (IOException e) { logger.log(Level.SEVERE, "Failed to send SIGUSR1 to subserver.", e); } @@ -162,7 +164,7 @@ public class Subserver { public void stop() { try { - process.destroy(); + serverProcess().destroy(); if (!process.waitFor(1, TimeUnit.MINUTES)) { forceStop(); } else if (thread.isAlive()) { @@ -177,6 +179,7 @@ public class Subserver { public void forceStop() { try { logger.log(Level.SEVERE, () -> serverName + " did not stop correctly, forcibly stopping!"); + serverProcess().destroyForcibly(); process.destroyForcibly(); if (thread.isAlive()) thread.join();