From fd6bc357c278a66e426f6628f67f520ef89891e3 Mon Sep 17 00:00:00 2001 From: Michal Krzywanski Date: Fri, 4 Sep 2020 12:46:25 +0200 Subject: [PATCH] Fix thread-safety access in ProjectGenerationInvoker See gh-1125 --- .../web/project/ProjectGenerationInvoker.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/initializr-web/src/main/java/io/spring/initializr/web/project/ProjectGenerationInvoker.java b/initializr-web/src/main/java/io/spring/initializr/web/project/ProjectGenerationInvoker.java index b63c8cfb..7f159f94 100644 --- a/initializr-web/src/main/java/io/spring/initializr/web/project/ProjectGenerationInvoker.java +++ b/initializr-web/src/main/java/io/spring/initializr/web/project/ProjectGenerationInvoker.java @@ -20,9 +20,9 @@ import java.io.IOException; import java.io.StringWriter; import java.nio.file.Path; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import io.spring.initializr.generator.buildsystem.BuildItemResolver; import io.spring.initializr.generator.buildsystem.BuildWriter; @@ -56,7 +56,7 @@ public class ProjectGenerationInvoker { private final ProjectRequestToDescriptionConverter requestConverter; - private transient Map> temporaryFiles = new LinkedHashMap<>(); + private transient Map> temporaryFiles = new ConcurrentHashMap<>(); public ProjectGenerationInvoker(ApplicationContext parentApplicationContext, ProjectRequestToDescriptionConverter requestConverter) { @@ -143,7 +143,14 @@ public class ProjectGenerationInvoker { } private void addTempFile(Path group, Path file) { - this.temporaryFiles.computeIfAbsent(group, (key) -> new ArrayList<>()).add(file); + this.temporaryFiles.compute(group, (path, paths) -> { + List newPaths = paths; + if (newPaths == null) { + newPaths = new ArrayList<>(); + } + newPaths.add(file); + return newPaths; + }); } /**