diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java index 64fb66b397..bda2ef91ea 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java @@ -102,15 +102,15 @@ public final class FutureInstrumentation extends Instrumenter.Default { public static class CanceledFutureAdvice { @Advice.OnMethodExit(suppress = Throwable.class) - public static void exit( - @Advice.This final Future future, @Advice.Return final boolean canceled) { - if (canceled) { - final ContextStore contextStore = - InstrumentationContext.get(Future.class, State.class); - final State state = contextStore.get(future); - if (state != null) { - state.closeContinuation(); - } + public static void exit(@Advice.This final Future future) { + // Try to close continuation even if future was not cancelled: + // the expectation is that continuation should be closed after 'cancel' + // is called, one way or another + final ContextStore contextStore = + InstrumentationContext.get(Future.class, State.class); + final State state = contextStore.get(future); + if (state != null) { + state.closeContinuation(); } } }