From 0b9f44fb2216edb03cb0ec82e169dd139bf6eccd Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Sat, 23 May 2026 12:30:15 +0100 Subject: [PATCH] Disable stable session id propagation until after tracer is registered This avoids a potential reentrant situation when tracer debug is enabled: 1. The full `Config` is logged during startup in its constructor 2. This includes any lazy config fields, such as the `hostname` 3. If the host is not available in the environment/host-files then `Config` calls the `hostname` command using `Runtime.exec(...)` 4. The `Runtime.exec(...)` call is intercepted by the process advice 5. The process advice calls `Config.get()` to get the stable session id 6. `Config.get()` returns `null` as the config is still being built The resulting NPE is caught before it escapes to the application, but it still results in log-spam that could confuse investigations. --- .../java/lang/ProcessImplStartAdvice.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/main/java/datadog/trace/instrumentation/java/lang/ProcessImplStartAdvice.java b/dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/main/java/datadog/trace/instrumentation/java/lang/ProcessImplStartAdvice.java index d7529cbea8e..ca368998c25 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/main/java/datadog/trace/instrumentation/java/lang/ProcessImplStartAdvice.java +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/main/java/datadog/trace/instrumentation/java/lang/ProcessImplStartAdvice.java @@ -12,16 +12,17 @@ class ProcessImplStartAdvice { public static AgentSpan beforeStart( @Advice.Argument(0) final String[] command, @Advice.Argument(1) final Map environment) { + + if (!AgentTracer.isRegistered()) { + return null; + } + String rootSessionId = Config.get().getRootSessionId(); if (rootSessionId != null && environment != null) { environment.put("_DD_ROOT_JAVA_SESSION_ID", rootSessionId); } - if (!ProcessImplInstrumentationHelpers.ONLINE) { - return null; - } - - if (command.length == 0 || !AgentTracer.isRegistered()) { + if (!ProcessImplInstrumentationHelpers.ONLINE || command.length == 0) { return null; }