From 19911173307b74392da21a2c848f896195d7c0f5 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Fri, 20 Jun 2025 19:23:09 +0100 Subject: [PATCH] Fix NPE in akka-http and pekko-http integrations Also fix a related issue where spans were not being finished while polling through leftover scopes. --- .../akkahttp/DatadogServerRequestResponseFlowWrapper.java | 4 ++-- .../pekkohttp/DatadogServerRequestResponseFlowWrapper.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java index f0c211e86bd..46e43ca1467 100644 --- a/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java +++ b/dd-java-agent/instrumentation/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/DatadogServerRequestResponseFlowWrapper.java @@ -168,16 +168,16 @@ public void onUpstreamFinish() throws Exception { @Override public void onUpstreamFailure(final Throwable ex) throws Exception { ContextScope scope = scopes.poll(); - AgentSpan span = AgentSpan.fromContext(scope.context()); if (scope != null) { // Mark the span as failed + AgentSpan span = AgentSpan.fromContext(scope.context()); DatadogWrapperHelper.finishSpan(span, ex); } // We will not receive any more responses from the user code, so clean up any // remaining spans scope = scopes.poll(); while (scope != null) { - span.finish(); + AgentSpan.fromContext(scope.context()).finish(); scope = scopes.poll(); } fail(responseOutlet, ex); diff --git a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java index 466f6657372..a58933f194f 100644 --- a/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java +++ b/dd-java-agent/instrumentation/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/DatadogServerRequestResponseFlowWrapper.java @@ -141,16 +141,16 @@ public void onUpstreamFinish() throws Exception { @Override public void onUpstreamFailure(final Throwable ex) throws Exception { ContextScope scope = scopes.poll(); - AgentSpan span = AgentSpan.fromContext(scope.context()); if (scope != null) { // Mark the span as failed + AgentSpan span = AgentSpan.fromContext(scope.context()); DatadogWrapperHelper.finishSpan(span, ex); } // We will not receive any more responses from the user code, so clean up any // remaining spans scope = scopes.poll(); while (scope != null) { - span.finish(); + AgentSpan.fromContext(scope.context()).finish(); scope = scopes.poll(); } fail(responseOutlet, ex);