2 * Created on Aug 21, 2003
9 * Stores times of requests to sml-kernel. This is used for informing
10 * Clients2KernelServer to kill sml-kernel if no response is coming back for a
11 * certain amount of time, which means that the bridge_ has probably crashed or
12 * is caught in an endless loop, and neeeds to be restarted.
15 import java.util.Vector;
17 import org.apache.log4j.Logger;
19 public class TimeCheckerThread extends Thread {
21 //Time to wait for response from the kernel to a request
22 private long wait_millis_;
24 //Stores the times when the waitTime for current request will run out
25 private Vector time_out_times_;
27 //Reference to the bridgeMain object
28 private BridgeMain bridge_;
30 static Logger logger_ = Logger.getLogger(TimeCheckerThread.class.getName());
33 * Constructor: instantiate a new TimeCheckerThread
36 * BridgeMain object that belongs to this TimeCheckerThread
38 * Time to wait for response from kernel before restarting
40 public TimeCheckerThread(BridgeMain bridge, long waitMillis) {
41 logger_.warn("TimeCheckerThread: bridge_=" + bridge + ", wait_millis_"
43 this.bridge_ = bridge;
44 this.time_out_times_ = bridge.getTimeOutTimes();
45 this.wait_millis_ = waitMillis;
54 if (!time_out_times_.isEmpty()) {
55 long first = ((Long) time_out_times_.firstElement())
57 long timeOut = first + wait_millis_;
58 long now = System.currentTimeMillis();
60 // timeOut: no response from sml-kernel within TIME_OUT:
64 // sleep until first time in vector would run out (plus
66 long sleepTime = timeOut - now + 20;
71 + time_out_times_.size()
72 + " request(s) waiting for response, sleeping for "
73 + sleepTime + " millis");
77 // TimesVector is empty: No pending requests
79 "TimeCheckerThread: no requests, sleeping for "
80 + wait_millis_ + " millis");
84 } catch (InterruptedException e) {
85 bridge_.log(1, "TimeCheckerThread interrupted");