diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java index 76eadc3a43f..6b8f2b0d9cb 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DatadogCapturedContextProvider.java @@ -16,7 +16,11 @@ public CapturedContext captureContext(CapturedContext underlying) { @Override public CapturedContext captureContextCopy(CapturedContext underlying) { - return new WithDatadogCapturedContext(AgentTracer.activeSpan(), underlying); + AgentSpan activeSpan = AgentTracer.activeSpan(); + if (activeSpan == null) { + return underlying; + } + return new WithDatadogCapturedContext(activeSpan, underlying); } private static final class WithDatadogCapturedContext implements CapturedContext { diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/test/groovy/ContextPreservingInstrumentationTest.groovy b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/test/groovy/ContextPreservingInstrumentationTest.groovy index 6f6a58d2b16..3fd0060d81c 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/test/groovy/ContextPreservingInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/test/groovy/ContextPreservingInstrumentationTest.groovy @@ -27,6 +27,27 @@ class ContextPreservingInstrumentationTest extends AgentTestRunner { assertParentChildTrace() } + def "capturedContext without an active span"() { + when: + runInSeparateThread { + try (def _ = asyncContextProvider.captureContext().attachContext()) { + childSpan() + } + } + + then: + assertTraces(1) { + trace(1) { + span { + operationName "child" + tags { + defaultTags() + } + } + } + } + } + def "wrapBiConsumer"() { setup: def parent = startParentContext()