2004-11-14 jrandom

* Fix a long standing leak in I2PTunnel (hanging on to i2psocket objects)
    * Fix a leak injected into the SimpleTimer
    * Fix a race condition in the tunnel message handling
This commit is contained in:
jrandom
2004-11-15 14:35:16 +00:00
committed by zzz
parent ad7dc66f90
commit 3780d290fa
10 changed files with 62 additions and 19 deletions

View File

@ -25,6 +25,7 @@ public class SimpleTimer {
private Map _eventTimes;
private SimpleTimer() {
_log = I2PAppContext.getGlobalContext().logManager().getLog(SimpleTimer.class);
_events = new TreeMap();
_eventTimes = new HashMap();
I2PThread runner = new I2PThread(new SimpleTimerRunner());
@ -79,25 +80,34 @@ public class SimpleTimer {
synchronized (_events) {
if (_events.size() <= 0)
_events.wait();
if (_events.size() > 100)
_log.warn("> 100 events! " + _events.values());
long now = System.currentTimeMillis();
long nextEventDelay = -1;
Object nextEvent = null;
while (true) {
if (_events.size() <= 0) break;
Long when = (Long)_events.firstKey();
if (when.longValue() <= now) {
TimedEvent evt = (TimedEvent)_events.remove(when);
_eventTimes.remove(when);
eventsToFire.add(evt);
if (evt != null) {
_eventTimes.remove(evt);
eventsToFire.add(evt);
}
} else {
nextEventDelay = when.longValue() - now;
nextEvent = _events.get(when);
break;
}
}
if (eventsToFire.size() <= 0) {
if (nextEventDelay != -1)
if (nextEventDelay != -1) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Next event in " + nextEventDelay + ": " + nextEvent);
_events.wait(nextEventDelay);
else
} else {
_events.wait();
}
}
}
} catch (InterruptedException ie) {