Make watchdog thread not hold on to server for 60 seconds

This commit is contained in:
embeddedt 2023-04-20 19:59:06 -04:00
parent d10ff8a24e
commit 21dcf9d3df
No known key found for this signature in database
GPG Key ID: A69433EC199B5613

View File

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