You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2023/11/20 12:45:06 UTC

(maven) branch master updated: Fix not closed ForkJoinPools (#1319)

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 143af9b085 Fix not closed ForkJoinPools (#1319)
143af9b085 is described below

commit 143af9b085d53e324131374a499752c1ecb1a7d2
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon Nov 20 13:44:59 2023 +0100

    Fix not closed ForkJoinPools (#1319)
---
 .../maven/project/DefaultProjectBuilder.java       | 26 ++++++++++++++++------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 4008ca50b4..878b989633 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -130,13 +130,17 @@ public class DefaultProjectBuilder implements ProjectBuilder {
 
     @Override
     public ProjectBuildingResult build(File pomFile, ProjectBuildingRequest request) throws ProjectBuildingException {
-        return new BuildSession(request, false).build(pomFile, new FileModelSource(pomFile));
+        try (BuildSession bs = new BuildSession(request, false)) {
+            return bs.build(pomFile, new FileModelSource(pomFile));
+        }
     }
 
     @Override
     public ProjectBuildingResult build(ModelSource modelSource, ProjectBuildingRequest request)
             throws ProjectBuildingException {
-        return new BuildSession(request, false).build(null, modelSource);
+        try (BuildSession bs = new BuildSession(request, false)) {
+            return bs.build(null, modelSource);
+        }
     }
 
     @Override
@@ -148,13 +152,17 @@ public class DefaultProjectBuilder implements ProjectBuilder {
     @Override
     public ProjectBuildingResult build(Artifact artifact, boolean allowStubModel, ProjectBuildingRequest request)
             throws ProjectBuildingException {
-        return new BuildSession(request, false).build(artifact, allowStubModel);
+        try (BuildSession bs = new BuildSession(request, false)) {
+            return bs.build(artifact, allowStubModel);
+        }
     }
 
     @Override
     public List<ProjectBuildingResult> build(List<File> pomFiles, boolean recursive, ProjectBuildingRequest request)
             throws ProjectBuildingException {
-        return new BuildSession(request, true).build(pomFiles, recursive);
+        try (BuildSession bs = new BuildSession(request, true)) {
+            return bs.build(pomFiles, recursive);
+        }
     }
 
     static class InterimResult {
@@ -194,7 +202,7 @@ public class DefaultProjectBuilder implements ProjectBuilder {
         }
     }
 
-    class BuildSession {
+    class BuildSession implements AutoCloseable {
         private final ProjectBuildingRequest request;
         private final RepositorySystemSession session;
         private final List<RemoteRepository> repositories;
@@ -207,17 +215,21 @@ public class DefaultProjectBuilder implements ProjectBuilder {
             this.session =
                     RepositoryUtils.overlay(request.getLocalRepository(), request.getRepositorySession(), repoSystem);
             this.repositories = RepositoryUtils.toRepos(request.getRemoteRepositories());
+            this.forkJoinPool = new ForkJoinPool(getParallelism(request));
             if (localProjects) {
                 this.modelPool = new ReactorModelPool();
                 this.transformerContextBuilder = modelBuilder.newTransformerContextBuilder();
-                this.forkJoinPool = new ForkJoinPool(getParallelism(request));
             } else {
                 this.modelPool = null;
                 this.transformerContextBuilder = null;
-                this.forkJoinPool = null;
             }
         }
 
+        @Override
+        public void close() {
+            this.forkJoinPool.shutdownNow();
+        }
+
         private int getParallelism(ProjectBuildingRequest request) {
             int parallelism = DEFAULT_BUILDER_PARALLELISM;
             try {