/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redPandaLib.services;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.redPandaLib.Main;
import org.redPandaLib.core.ConnectionHandler;
import org.redPandaLib.core.Test;
/**
*
* @author rflohr
*/
public class WatchDog {
private static Thread thread;
public static void start() {
thread = new Thread() {
@Override
public void run() {
while (true) {
try {
sleep(1000 * 60);
} catch (InterruptedException ex) {
Logger.getLogger(WatchDog.class.getName()).log(Level.SEVERE, null, ex);
}
long delay = System.currentTimeMillis() - ConnectionHandler.lastRun;
if (delay > 1000 * 60 * 1) {
StackTraceElement[] stackTrace = Test.connectionHandler.getStackTrace();
String ownStackTrace = "";
for (StackTraceElement a : stackTrace) {
ownStackTrace += a.toString() + "\n";
}
String lastLine = stackTrace[stackTrace.length - 1].toString();
if ((!lastLine.contains("ConnectionHandler.java:174") && !lastLine.contains("ConnectionHandler.java:221")) || (Test.peerListLock.isLocked())) {
String lockString = "";
if (Test.peerListLock.isLocked()) {
Thread ownerExtended = Test.peerListLock.getOwnerExtended();
if (ownerExtended == null) {
Main.sendBroadCastMsg("peerlist is locked but getowner was null");
} else {
lockString += "\n\n\npeerlist lockString: ";
lockString += ownerExtended.getName() + "\nstacktrace of thread: ";
lockString += Test.peerListLock.getLastSuccesfullLockThreadStack();
}
}
Main.sendBroadCastMsg("Wuff! Wuff! ConnectionHandler didn't run for quite a while (" + Test.peerListLock.isLocked() + "): " + delay + "\nState: " + Test.connectionHandler.getState() + "\nStackTrace: " + ownStackTrace + lockString);
return;
} else {
//Main.sendBroadCastMsg("No Wuff!");
}
}
}
}
};
thread.start();
}
}