From 837db7a756164cadd978e53f8c566f0f14b79b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Thu, 2 Mar 2023 16:16:32 +0100 Subject: [PATCH] [MNG-7716] ConcurrencyDependencyGraph deadlock if no root is selected If ConcurrencyDependencyGraph#getRootSchedulableBuilds returns an empty list then MultiThreadedBuilder is locked forever as it never gets a build result (because nothing is scheduled). This changes the method, that in such case just the first project is returned, this might not give the best performance, but ensures that there is at least one build scheduled and the build-loop can proceed. This closes #1028 --- .../builder/multithreaded/ConcurrencyDependencyGraph.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java index 37c05e666903..faa48481ed9a 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java @@ -69,6 +69,10 @@ public List getRootSchedulableBuilds() { result.add(projectBuild.getProject()); } } + if (result.isEmpty() && projectBuilds.size() > 0) { + // Must return at least one project + result.add(projectBuilds.get(0).getProject()); + } return new ArrayList<>(result); }