From 3a0a471dd5fc3da37da5f49da6eafae8c3f19adf Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Fri, 8 Feb 2019 16:58:54 -0500 Subject: [PATCH] Close future's continuation on cancel even if future itself was not cancelled --- .../java/concurrent/FutureInstrumentation.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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(); } } }