From 3c4d3d2bb2303d041594202b3ccac85aa15352c7 Mon Sep 17 00:00:00 2001 From: Kristofer Karlsson Date: Wed, 17 Feb 2021 14:42:57 +0100 Subject: [PATCH] Move pendingDeadline.cancel out of synchronized block --- context/src/main/java/io/grpc/Context.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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(); }