diff --git a/common/src/main/java/io/netty/util/concurrent/SingleThreadEventExecutor.java b/common/src/main/java/io/netty/util/concurrent/SingleThreadEventExecutor.java index 2aabc15d81..416204cc4c 100644 --- a/common/src/main/java/io/netty/util/concurrent/SingleThreadEventExecutor.java +++ b/common/src/main/java/io/netty/util/concurrent/SingleThreadEventExecutor.java @@ -800,16 +800,19 @@ public abstract class SingleThreadEventExecutor extends AbstractEventExecutor { setSuccessInternal(result); } } else { - task.call(); - if (!executor().isShutdown()) { - long p = periodNanos; - if (p > 0) { - deadlineNanos += p; - } else { - deadlineNanos = nanoTime() - p; - } - if (!isDone()) { - executor().delayedTaskQueue.add(this); + // check if is done as it may was cancelled + if (!isDone()) { + task.call(); + if (!executor().isShutdown()) { + long p = periodNanos; + if (p > 0) { + deadlineNanos += p; + } else { + deadlineNanos = nanoTime() - p; + } + if (!isDone()) { + executor().delayedTaskQueue.add(this); + } } } }