From e6644236eda8cd67bc631355ff4d2d7870cee1b8 Mon Sep 17 00:00:00 2001 From: zab2 Date: Fri, 13 Nov 2015 23:28:02 +0000 Subject: [PATCH] Interrupt when cancelling events --- core/java/src/net/i2p/util/SimpleTimer2.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/java/src/net/i2p/util/SimpleTimer2.java b/core/java/src/net/i2p/util/SimpleTimer2.java index d22be10cb..f1171169d 100644 --- a/core/java/src/net/i2p/util/SimpleTimer2.java +++ b/core/java/src/net/i2p/util/SimpleTimer2.java @@ -396,7 +396,7 @@ public class SimpleTimer2 { // There's probably a race here, where it's cancelled after it's running // The result (if rescheduled) is a dup on the queue, see tickets 1694, 1705 // Mitigated by close-to-execution check in reschedule() - boolean cancelled = _future.cancel(false); + boolean cancelled = _future.cancel(true); if (cancelled) _state = TimedEventState.CANCELLED; else @@ -422,6 +422,10 @@ public class SimpleTimer2 { long before = System.currentTimeMillis(); long delay = 0; synchronized(this) { + if (Thread.currentThread().isInterrupted()) { + _log.warn("I was interrupted in run, state "+_state+" event "+this); + return; + } if (_rescheduleAfterRun) throw new IllegalStateException(this + " rescheduleAfterRun cannot be true here");