From 01d682117cc0ca850a558cfccc0c22a185b48462 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 12 May 2025 09:36:39 +0200 Subject: [PATCH 1/2] Avoid potential race conditions on collecting process tags --- .../src/main/java/datadog/trace/api/ProcessTags.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/ProcessTags.java b/internal-api/src/main/java/datadog/trace/api/ProcessTags.java index f87d02012fd..bc1a4ba217a 100644 --- a/internal-api/src/main/java/datadog/trace/api/ProcessTags.java +++ b/internal-api/src/main/java/datadog/trace/api/ProcessTags.java @@ -102,11 +102,13 @@ static void calculate() { private ProcessTags() {} // need to be synchronized on writing. As optimization, it does not need to be sync on read. - public static synchronized void addTag(String key, String value) { + public static void addTag(String key, String value) { if (enabled) { - Lazy.TAGS.put(key, value); - Lazy.serializedForm = null; - Lazy.listForm = null; + synchronized (Lazy.TAGS) { + Lazy.TAGS.put(key, value); + Lazy.serializedForm = null; + Lazy.listForm = null; + } } } From ac47a276efcfe472339723063bfebbe8b6d4fb3d Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 12 May 2025 09:52:27 +0200 Subject: [PATCH 2/2] Add synchronisation on test methods --- .../main/java/datadog/trace/api/ProcessTags.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/ProcessTags.java b/internal-api/src/main/java/datadog/trace/api/ProcessTags.java index bc1a4ba217a..53bfb8d979a 100644 --- a/internal-api/src/main/java/datadog/trace/api/ProcessTags.java +++ b/internal-api/src/main/java/datadog/trace/api/ProcessTags.java @@ -138,15 +138,19 @@ public static UTF8BytesString getTagsForSerialization() { /** Visible for testing. */ static void empty() { - Lazy.TAGS.clear(); - Lazy.serializedForm = null; - Lazy.listForm = null; + synchronized (Lazy.TAGS) { + Lazy.TAGS.clear(); + Lazy.serializedForm = null; + Lazy.listForm = null; + } } /** Visible for testing. */ static void reset() { - empty(); - enabled = Config.get().isExperimentalPropagateProcessTagsEnabled(); - Lazy.TAGS.putAll(Lazy.loadTags()); + synchronized (Lazy.TAGS) { + empty(); + enabled = Config.get().isExperimentalPropagateProcessTagsEnabled(); + Lazy.TAGS.putAll(Lazy.loadTags()); + } } }