diff --git a/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java b/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java index 0e8c9ea49..2e137b3fa 100644 --- a/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java +++ b/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java @@ -51,7 +51,8 @@ private HypertraceConfig() {} // so avoiding for perf reasons private static volatile boolean servletCausingException; - private static AgentConfig agentConfig; + // volatile field in order to properly handle lazy initialization with double-checked locking + private static volatile AgentConfig agentConfig; static final String DEFAULT_SERVICE_NAME = "unknown"; static final String DEFAULT_REPORTING_ENDPOINT = "http://localhost:9411/api/v2/spans"; @@ -123,7 +124,9 @@ private static boolean isHypertraceType(String message) { /** Reset the config, use only in tests. */ @VisibleForTesting public static void reset() { - agentConfig = null; + synchronized (HypertraceConfig.class) { + agentConfig = null; + } } private static AgentConfig load() throws IOException {