From 873e9a43118facde470504bdaf4824dbc21aaafb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20L=C3=BCpges?= Date: Wed, 4 Feb 2026 13:34:18 +0100 Subject: [PATCH] respect concurrency for CachedQueueService#taskInfoMap --- .../java/de/monticore/gradle/queue/CachedQueueService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/se-commons-gradle/src/main/java/de/monticore/gradle/queue/CachedQueueService.java b/se-commons-gradle/src/main/java/de/monticore/gradle/queue/CachedQueueService.java index c53a479..ec864fd 100644 --- a/se-commons-gradle/src/main/java/de/monticore/gradle/queue/CachedQueueService.java +++ b/se-commons-gradle/src/main/java/de/monticore/gradle/queue/CachedQueueService.java @@ -46,6 +46,7 @@ import java.net.URLClassLoader; import java.security.*; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Semaphore; import java.util.function.Predicate; import java.util.function.Supplier; @@ -126,7 +127,7 @@ protected void init(ServiceRegistry serviceRegistry) { * WorkParameters do not support the information stored in the {@link ActualTaskInfo}, * which is why we use this weird workaround of a UUID-key */ - protected Map> taskInfoMap = new LinkedHashMap<>(); + protected Map> taskInfoMap = new ConcurrentHashMap<>(); protected final IsolationScheme, WorkParameters> isolationScheme = new IsolationScheme<>(Cast.uncheckedCast(WorkAction.class), WorkParameters.class, @@ -278,7 +279,8 @@ public void doExecuteWorkAction(UUID actionUUID) { } timeWaited = System.currentTimeMillis() - timeWaited; try { - doExecuteWorkAction(taskInfoMap.get(actionUUID), timeWaited); + ActualTaskInfo info = Objects.requireNonNull(taskInfoMap.remove(actionUUID), "WorkAction with UUID " + actionUUID + " was never registered. This is an internal error."); + doExecuteWorkAction(info, timeWaited); } finally { semaphore.release(); }