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) {