diff --git a/context/src/main/java/io/grpc/Context.java b/context/src/main/java/io/grpc/Context.java index 3a500b07fb..530052d747 100644 --- a/context/src/main/java/io/grpc/Context.java +++ b/context/src/main/java/io/grpc/Context.java @@ -826,18 +826,22 @@ public class Context { @CanIgnoreReturnValue public boolean cancel(Throwable cause) { boolean triggeredCancel = false; + ScheduledFuture localPendingDeadline = null; synchronized (this) { if (!cancelled) { cancelled = true; if (pendingDeadline != null) { // If we have a scheduled cancellation pending attempt to cancel it. - pendingDeadline.cancel(false); + localPendingDeadline = pendingDeadline; pendingDeadline = null; } this.cancellationCause = cause; triggeredCancel = true; } } + if (localPendingDeadline != null) { + localPendingDeadline.cancel(false); + } if (triggeredCancel) { notifyAndClearListeners(); }