cleanup in transport.Heartbeater

This commit is contained in:
Shikhar Bhushan
2010-08-01 18:32:06 +01:00
parent 2882129211
commit 3cb235bbfd

View File

@@ -59,29 +59,29 @@ final class Heartbeater
synchronized void setInterval(int interval) { synchronized void setInterval(int interval) {
this.interval = interval; this.interval = interval;
if (interval != 0) { if (interval > 0 && getState() == Thread.State.NEW)
if (!started)
start(); start();
notify(); notify();
} }
}
synchronized int getInterval() { synchronized int getInterval() {
return interval; return interval;
} }
synchronized private int getPositiveInterval()
throws InterruptedException {
while (interval <= 0)
wait();
return interval;
}
@Override @Override
public void run() { public void run() {
log.debug("Starting");
try { try {
while (!Thread.currentThread().isInterrupted()) { while (!Thread.currentThread().isInterrupted()) {
int hi; final int hi = getPositiveInterval();
synchronized (this) { if (trans.isRunning()) {
while ((hi = interval) == 0)
wait();
}
if (!started)
started = true;
else if (trans.isRunning()) {
log.info("Sending heartbeat since {} seconds elapsed", hi); log.info("Sending heartbeat since {} seconds elapsed", hi);
trans.write(new SSHPacket(Message.IGNORE)); trans.write(new SSHPacket(Message.IGNORE));
} }
@@ -96,4 +96,5 @@ final class Heartbeater
log.debug("Stopping"); log.debug("Stopping");
} }
} }