diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-common/src/main/java/datadog/trace/instrumentation/elasticsearch/ShadowExistingScopeAdvice.java b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-common/src/main/java/datadog/trace/instrumentation/elasticsearch/ShadowExistingScopeAdvice.java index cd6a1ec0cf4..8f81e315c95 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-common/src/main/java/datadog/trace/instrumentation/elasticsearch/ShadowExistingScopeAdvice.java +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-common/src/main/java/datadog/trace/instrumentation/elasticsearch/ShadowExistingScopeAdvice.java @@ -17,7 +17,7 @@ public static AgentScope enter() { return activateSpan(noopSpan()); } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit(@Advice.Enter final AgentScope scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/gax-1.4/src/main/java/datadog/trace/instrumentation/gax/CallbackChainRetryingFutureInstrumentation.java b/dd-java-agent/instrumentation/gax-1.4/src/main/java/datadog/trace/instrumentation/gax/CallbackChainRetryingFutureInstrumentation.java index f72e2ae2dd9..9eb3b2edd35 100644 --- a/dd-java-agent/instrumentation/gax-1.4/src/main/java/datadog/trace/instrumentation/gax/CallbackChainRetryingFutureInstrumentation.java +++ b/dd-java-agent/instrumentation/gax-1.4/src/main/java/datadog/trace/instrumentation/gax/CallbackChainRetryingFutureInstrumentation.java @@ -65,7 +65,7 @@ public static Runnable capturePrevious( return previousListener; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void cancelSuperseded( @Advice.Enter final Runnable previousListener, @Advice.FieldValue("attemptFutureCompletionListener") final Runnable newListener) { diff --git a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyByteBodyInstrumentation.java b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyByteBodyInstrumentation.java index a39e7362ba7..720820dbbef 100644 --- a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyByteBodyInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyByteBodyInstrumentation.java @@ -207,7 +207,7 @@ static void after( } static class NIOInputStreamRecycleAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) static void after(@Advice.This final NIOInputStream thiz) { InstrumentationContext.get(NIOInputStream.class, StoredByteBody.class).put(thiz, null); } diff --git a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyCharBodyInstrumentation.java b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyCharBodyInstrumentation.java index 3a5e27cfabc..824ca02fa57 100644 --- a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyCharBodyInstrumentation.java +++ b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyCharBodyInstrumentation.java @@ -221,7 +221,7 @@ static void after( } static class NIOReaderRecycleAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) static void after(@Advice.This final NIOReader thiz) { InstrumentationContext.get(NIOReader.class, StoredCharBody.class).put(thiz, null); } diff --git a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/main/java/datadog/trace/instrumentation/java/completablefuture/AsyncTaskInstrumentation.java b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/main/java/datadog/trace/instrumentation/java/completablefuture/AsyncTaskInstrumentation.java index 3cfe3b47b84..63099024b40 100644 --- a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/main/java/datadog/trace/instrumentation/java/completablefuture/AsyncTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/main/java/datadog/trace/instrumentation/java/completablefuture/AsyncTaskInstrumentation.java @@ -52,14 +52,14 @@ public static AgentScope before(@Advice.This ForkJoinTask zis) { return startTaskScope(InstrumentationContext.get(ForkJoinTask.class, State.class), zis); } - @Advice.OnMethodExit + @Advice.OnMethodExit(onThrowable = Throwable.class) public static void after(@Advice.Enter AgentScope scope) { endTaskScope(scope); } } public static class Cancel { - @Advice.OnMethodExit + @Advice.OnMethodExit(onThrowable = Throwable.class) public static void cancel(@Advice.This ForkJoinTask task) { State state = InstrumentationContext.get(ForkJoinTask.class, State.class).get(task); if (null != state) { diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java index 1092d9b2a0c..bb2c4c42a1d 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java @@ -37,6 +37,7 @@ import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.clients.consumer.internals.ConsumerCoordinator; +import org.apache.kafka.common.errors.WakeupException; /** * This instrumentation saves additional information from the KafkaConsumer, such as consumer group @@ -258,11 +259,12 @@ public static AgentScope onEnter(@Advice.This KafkaConsumer consumer) { return null; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void captureGroup( @Advice.Enter final AgentScope scope, @Advice.This KafkaConsumer consumer, - @Advice.Return ConsumerRecords records) { + @Advice.Return ConsumerRecords records, + @Advice.Thrown Throwable throwable) { int recordsCount = 0; if (records != null) { KafkaConsumerInfo kafkaConsumerInfo = @@ -281,6 +283,9 @@ public static void captureGroup( } AgentSpan span = scope.span(); span.setTag(KAFKA_RECORDS_COUNT, recordsCount); + if (!(throwable instanceof WakeupException)) { + span.addThrowable(throwable); + } span.finish(); scope.close(); } diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java index 156c6d1f1fa..c948836469c 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.java @@ -17,6 +17,7 @@ import org.apache.kafka.clients.Metadata; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.internals.ConsumerDelegate; +import org.apache.kafka.common.errors.WakeupException; /** * this method transfers the consumer group from the KafkaConsumer class key to the ConsumerRecords @@ -45,11 +46,12 @@ public static AgentScope onEnter(@Advice.This ConsumerDelegate consumer) { return null; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void captureGroup( @Advice.Enter final AgentScope scope, @Advice.This ConsumerDelegate consumer, - @Advice.Return ConsumerRecords records) { + @Advice.Return ConsumerRecords records, + @Advice.Thrown Throwable throwable) { int recordsCount = 0; if (records != null) { // new - we are getting the KafkaConsumerInfo from the ConsumerDelegate instead of @@ -70,6 +72,9 @@ public static void captureGroup( } AgentSpan span = scope.span(); span.setTag(KAFKA_RECORDS_COUNT, recordsCount); + if (!(throwable instanceof WakeupException)) { + span.addThrowable(throwable); + } span.finish(); scope.close(); } diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/CommandHandlerInstrumentation.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/CommandHandlerInstrumentation.java index 3ced2c53bd9..86ca3004e69 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/CommandHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/CommandHandlerInstrumentation.java @@ -63,7 +63,7 @@ public static AgentScope before(@Advice.Argument(2) RedisCommand command) { return null; } - @Advice.OnMethodExit + @Advice.OnMethodExit(onThrowable = Throwable.class) public static void after(@Advice.Enter AgentScope scope) { endTaskScope(scope); } diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandCompleteAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandCompleteAdvice.java index 5b8db94421c..ea04ed01cbf 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandCompleteAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandCompleteAdvice.java @@ -12,7 +12,7 @@ public class RedisSubscriptionCommandCompleteAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterComplete( @Advice.Origin("#m") String method, @Advice.This RedisCommand command, diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandErrorAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandErrorAdvice.java index ebae9eb7e61..0977eb92f5f 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandErrorAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandErrorAdvice.java @@ -9,7 +9,7 @@ import net.bytebuddy.asm.Advice; public class RedisSubscriptionCommandErrorAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterError( @Advice.This RedisCommand command, @Advice.Argument(value = 0) Throwable throwable) { diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandOnCompleteAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandOnCompleteAdvice.java index 2db7dc34a48..ca0951bc1ca 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandOnCompleteAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionCommandOnCompleteAdvice.java @@ -13,7 +13,7 @@ /** Instrumentation for SubscriptionCommand in version 5.3.6 and later */ public class RedisSubscriptionCommandOnCompleteAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterComplete( @Advice.This RedisCommand command, @Advice.FieldValue("subscription") Subscription subscription) { diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java index 32333a81cd2..d10800f5d94 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/main/java/datadog/trace/instrumentation/lettuce5/rx/RedisSubscriptionSubscribeAdvice.java @@ -59,12 +59,14 @@ public static State beforeSubscribe( return new State(parentScope, span); } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void afterSubscribe( @Advice.FieldValue("command") RedisCommand command, @Advice.FieldValue("subscriptionCommand") RedisCommand subscriptionCommand, - @Advice.Enter State state) { - if (!expectsResponse(command)) { + @Advice.Enter State state, + @Advice.Thrown Throwable throwable) { + if (throwable != null || !expectsResponse(command)) { + DECORATE.onError(state.span, throwable); DECORATE.beforeFinish(state.span); state.span.finish(); InstrumentationContext.get(RedisCommand.class, AgentSpan.class) diff --git a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java index 301ba879fa9..b2902bf4ff5 100644 --- a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java +++ b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/main/java/datadog/trace/instrumentation/opensearch/ShadowExistingScopeAdvice.java @@ -17,7 +17,7 @@ public static AgentScope enter() { return activateSpan(noopSpan()); } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit(@Advice.Enter final AgentScope scope) { scope.close(); } diff --git a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAsyncResponseInstrumentation.java b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAsyncResponseInstrumentation.java index 0942d990edd..1ae11e76090 100644 --- a/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAsyncResponseInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jakarta-rs-annotations-3.0/src/main/java/datadog/trace/instrumentation/jakarta3/JakartaRsAsyncResponseInstrumentation.java @@ -65,8 +65,9 @@ public void methodAdvice(MethodTransformer transformer) { public static class AsyncResponseAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + public static void stopSpan( + @Advice.This final AsyncResponse asyncResponse, @Advice.Thrown Throwable throwable) { final ContextStore contextStore = InstrumentationContext.get(AsyncResponse.class, AgentSpan.class); @@ -74,6 +75,7 @@ public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { final AgentSpan span = contextStore.get(asyncResponse); if (span != null) { contextStore.put(asyncResponse, null); + DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); span.finish(); } @@ -82,7 +84,7 @@ public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { public static class AsyncResponseThrowableAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( @Advice.This final AsyncResponse asyncResponse, @Advice.Argument(0) final Throwable throwable) { @@ -102,8 +104,9 @@ public static void stopSpan( public static class AsyncResponseCancelAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + public static void stopSpan( + @Advice.This final AsyncResponse asyncResponse, @Advice.Thrown Throwable throwable) { final ContextStore contextStore = InstrumentationContext.get(AsyncResponse.class, AgentSpan.class); @@ -111,7 +114,11 @@ public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { final AgentSpan span = contextStore.get(asyncResponse); if (span != null) { contextStore.put(asyncResponse, null); - span.setTag("canceled", true); + if (throwable != null) { + DECORATE.onError(span, throwable); + } else { + span.setTag("canceled", true); + } DECORATE.beforeFinish(span); span.finish(); } diff --git a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java index 849ff1cdc98..9972a720d8c 100644 --- a/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java +++ b/dd-java-agent/instrumentation/rs/jax-rs/jax-rs-annotations/jax-rs-annotations-2.0/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java @@ -65,8 +65,9 @@ public void methodAdvice(MethodTransformer transformer) { public static class AsyncResponseAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + public static void stopSpan( + @Advice.This final AsyncResponse asyncResponse, @Advice.Thrown Throwable throwable) { final ContextStore contextStore = InstrumentationContext.get(AsyncResponse.class, AgentSpan.class); @@ -74,6 +75,7 @@ public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { final AgentSpan span = contextStore.get(asyncResponse); if (span != null) { contextStore.put(asyncResponse, null); + DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); span.finish(); } @@ -82,7 +84,7 @@ public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { public static class AsyncResponseThrowableAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( @Advice.This final AsyncResponse asyncResponse, @Advice.Argument(0) final Throwable throwable) { @@ -102,8 +104,9 @@ public static void stopSpan( public static class AsyncResponseCancelAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) - public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + public static void stopSpan( + @Advice.This final AsyncResponse asyncResponse, @Advice.Thrown Throwable throwable) { final ContextStore contextStore = InstrumentationContext.get(AsyncResponse.class, AgentSpan.class); @@ -111,7 +114,11 @@ public static void stopSpan(@Advice.This final AsyncResponse asyncResponse) { final AgentSpan span = contextStore.get(asyncResponse); if (span != null) { contextStore.put(asyncResponse, null); - span.setTag("canceled", true); + if (throwable != null) { + DECORATE.onError(span, throwable); + } else { + span.setTag("canceled", true); + } DECORATE.beforeFinish(span); span.finish(); } diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java index 874df60efb5..f175ada8f4b 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ContextPreservingInstrumentation.java @@ -62,7 +62,7 @@ public static AgentScope enter(@Advice.FieldValue("saved") final ContextMap cont return null; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exit(@Advice.Enter final AgentScope agentScope) { if (agentScope != null) { agentScope.close();