From ec2820c08efba42517571c36f41f5bdfe6d4b444 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Mon, 20 Jul 2026 22:09:53 +0100 Subject: [PATCH] Remove AgentTracer.noopScope() sentinel from advice call sites Replace noopScope() with null where the returned scope has no observable side effects to preserve. Co-Authored-By: Claude Sonnet 5 --- .../netty40/NettyChannelHandlerContextInstrumentation.java | 7 ++++--- .../netty41/NettyChannelHandlerContextInstrumentation.java | 7 ++++--- .../vertx_3_4/server/RouteHandlerWrapper.java | 3 +-- .../vertx_4_0/server/RouteHandlerWrapper.java | 3 +-- .../trace/bootstrap/instrumentation/api/AgentTracer.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java index 7cc2884896d..7631b46ee22 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java +++ b/dd-java-agent/instrumentation/netty/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelHandlerContextInstrumentation.java @@ -5,7 +5,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.netty40.AttributeKeys.CONTEXT_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty40.NettyChannelPipelineInstrumentation.ADDITIONAL_INSTRUMENTATION_NAMES; @@ -75,14 +74,16 @@ public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) final AgentSpan channelSpan = spanFromContext(storedContext); if (channelSpan == null || channelSpan == activeSpan()) { // don't modify the scope - return noopScope(); + return null; } return activateSpan(channelSpan); } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) public static void close(@Advice.Enter final AgentScope scope) { - scope.close(); + if (scope != null) { + scope.close(); + } } private void muzzleCheck() { diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java index 62363fda0cc..fd979bd9198 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelHandlerContextInstrumentation.java @@ -5,7 +5,6 @@ import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope; import static datadog.trace.bootstrap.instrumentation.api.Java8BytecodeBridge.spanFromContext; import static datadog.trace.instrumentation.netty41.AttributeKeys.CONTEXT_ATTRIBUTE_KEY; import static datadog.trace.instrumentation.netty41.NettyChannelPipelineInstrumentation.ADDITIONAL_INSTRUMENTATION_NAMES; @@ -75,14 +74,16 @@ public static AgentScope scopeSpan(@Advice.This final ChannelHandlerContext ctx) final AgentSpan channelSpan = spanFromContext(storedContext); if (channelSpan == null || channelSpan == activeSpan()) { // don't modify the scope - return noopScope(); + return null; } return activateSpan(channelSpan); } @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) public static void close(@Advice.Enter final AgentScope scope) { - scope.close(); + if (scope != null) { + scope.close(); + } } private void muzzleCheck() { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java index 0f7a5adade7..7af44b78e9d 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java @@ -2,7 +2,6 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; import static datadog.trace.instrumentation.vertx_3_4.server.VertxDecorator.DECORATE; @@ -62,7 +61,7 @@ public void handle(final RoutingContext routingContext) { } setRoute(routingContext); } - try (final ContextScope scope = span != null ? activateSpan(span) : noopScope()) { + try (final ContextScope scope = span != null ? activateSpan(span) : null) { try { actual.handle(routingContext); } catch (final Throwable t) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java index 70aaa687dde..28e79e35a27 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java @@ -2,7 +2,6 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; -import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.noopScope; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR; import static datadog.trace.instrumentation.vertx_4_0.server.VertxDecorator.DECORATE; @@ -61,7 +60,7 @@ public void handle(final RoutingContext routingContext) { setRoute(routingContext); } - try (final ContextScope scope = span != null ? activateSpan(span) : noopScope()) { + try (final ContextScope scope = span != null ? activateSpan(span) : null) { try { actual.handle(routingContext); } catch (final Throwable t) { diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java index 237ea38267f..e10ee9e3fe7 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java @@ -670,7 +670,7 @@ public Context currentContext() { @Override public ContextScope attach(Context context) { - return noopScope(); + return NoopScope.INSTANCE; } @Override