From 1494a79d9955064edf4acc29a5c4ef4cbc37f241 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 15 Jul 2025 10:22:57 +0300 Subject: [PATCH] Clear context class loader from our threads --- .../io/opentelemetry/instrumentation/jmx/engine/BeanFinder.java | 1 + .../instrumentation/runtimemetrics/java17/RuntimeMetrics.java | 1 + .../java/io/opentelemetry/javaagent/tooling/AgentInstaller.java | 1 + .../io/opentelemetry/javaagent/tooling/TransformSafeLogger.java | 1 + 4 files changed, 4 insertions(+) diff --git a/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanFinder.java b/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanFinder.java index a5a05ee20660..ed04a8a56df5 100644 --- a/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanFinder.java +++ b/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanFinder.java @@ -35,6 +35,7 @@ class BeanFinder { runnable -> { Thread result = new Thread(runnable, "jmx_bean_finder"); result.setDaemon(true); + result.setContextClassLoader(null); return result; }); private final long discoveryDelay; diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetrics.java b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetrics.java index 42c175d2df4c..415999a49601 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetrics.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetrics.java @@ -103,6 +103,7 @@ private JfrRuntimeMetrics(OpenTelemetry openTelemetry, Predicate fea recordingStream.onMetadata(event -> startUpLatch.countDown()); Thread daemonRunner = new Thread(recordingStream::start, "OpenTelemetry JFR-Metrics-Runner"); daemonRunner.setDaemon(true); + daemonRunner.setContextClassLoader(null); daemonRunner.start(); } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index f431334b72c9..77c41189286b 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -492,6 +492,7 @@ public void run() { Thread thread = new Thread(this::runAgentListeners); thread.setName("delayed-agent-listeners"); thread.setDaemon(true); + thread.setContextClassLoader(null); thread.start(); } diff --git a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java index 212e1abbefea..4776c9bddc6e 100644 --- a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java +++ b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/TransformSafeLogger.java @@ -33,6 +33,7 @@ public final class TransformSafeLogger { Thread thread = new Thread(new LogMessageQueueReader()); thread.setName("otel-javaagent-transform-safe-logger"); thread.setDaemon(true); + thread.setContextClassLoader(null); thread.start(); } else { logMessageQueue = null;