From 9089b713d2b7bdd36b5b120efcabdb2191323bbe Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Thu, 12 May 2022 15:02:42 -0600 Subject: [PATCH 1/2] Fix concurrency issue in LazilyConfiguredMapping --- build.gradle | 2 +- .../javaversions/LazilyConfiguredMapping.java | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 2923d147a..81fce7d31 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ buildscript { classpath 'com.palantir.gradle.externalpublish:gradle-external-publish-plugin:1.11.0' classpath 'com.palantir.gradle.consistentversions:gradle-consistent-versions:2.10.0' classpath 'com.gradle.publish:plugin-publish-plugin:0.21.0' - classpath 'com.palantir.baseline:gradle-baseline-java:4.133.0' + classpath 'com.palantir.baseline:gradle-baseline-java:4.131.0' classpath 'com.palantir.javaformat:gradle-palantir-java-format:2.24.0' } } diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/LazilyConfiguredMapping.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/LazilyConfiguredMapping.java index 647932cc4..94efb8e04 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/LazilyConfiguredMapping.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/LazilyConfiguredMapping.java @@ -23,25 +23,32 @@ import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; +import javax.annotation.concurrent.GuardedBy; import org.gradle.api.Action; final class LazilyConfiguredMapping { private final Supplier valueFactory; + + @GuardedBy("this") private final List> values = new ArrayList<>(); + + @GuardedBy("this") private final Map> computedValues = new HashMap<>(); + + @GuardedBy("this") private boolean finalized = false; LazilyConfiguredMapping(Supplier valueFactory) { this.valueFactory = valueFactory; } - public void put(LazyValues lazyValues) { + public synchronized void put(LazyValues lazyValues) { ensureNotFinalized(); values.add(lazyValues); } - public void put(K key, Action value) { + public synchronized void put(K key, Action value) { ensureNotFinalized(); put((requestedKey, _ignored) -> { @@ -62,7 +69,7 @@ private void ensureNotFinalized() { } } - public Optional get(K key, A additionalData) { + public synchronized Optional get(K key, A additionalData) { finalized = true; return computedValues.computeIfAbsent(key, _ignored -> { From 69b4c6bbec4e082cf8183f757538036bcc3b757d Mon Sep 17 00:00:00 2001 From: svc-changelog Date: Thu, 12 May 2022 21:07:32 +0000 Subject: [PATCH 2/2] Add generated changelog entries --- changelog/@unreleased/pr-2268.v2.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelog/@unreleased/pr-2268.v2.yml diff --git a/changelog/@unreleased/pr-2268.v2.yml b/changelog/@unreleased/pr-2268.v2.yml new file mode 100644 index 000000000..d15df44a3 --- /dev/null +++ b/changelog/@unreleased/pr-2268.v2.yml @@ -0,0 +1,5 @@ +type: fix +fix: + description: Fix concurrency issue in LazilyConfiguredMapping + links: + - https://github.com/palantir/gradle-baseline/pull/2268