From 21dcf9d3df47e8f4d12b4b3d566c3b1e24496d4f Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 20 Apr 2023 19:59:06 -0400 Subject: [PATCH] Make watchdog thread not hold on to server for 60 seconds --- .../modernfix/world/IntegratedWatchdog.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java b/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java index 643712ed..7a287c91 100644 --- a/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java +++ b/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java @@ -9,25 +9,29 @@ import org.apache.logging.log4j.Logger; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; +import java.lang.ref.WeakReference; import java.util.concurrent.TimeUnit; public class IntegratedWatchdog extends Thread { private static final Logger LOGGER = LogManager.getLogger(); - private final MinecraftServer server; + private final WeakReference server; private static final long MAX_TICK_DELTA = 40*1000; public IntegratedWatchdog(MinecraftServer server) { - this.server = server; + this.server = new WeakReference<>(server); this.setDaemon(true); this.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandlerWithName(LOGGER)); this.setName("ModernFix integrated server watchdog"); } public void run() { - while(server.isRunning()) { - long nextTick = this.server.getNextTickTime(); + while(true) { + MinecraftServer server = this.server.get(); + if(server == null || !server.isRunning()) + return; + long nextTick = server.getNextTickTime(); long curTime = Util.getMillis(); long delta = curTime - nextTick; if(delta > MAX_TICK_DELTA) {