From 6c59fced77e2619941ee4f228ed54d8aa7244df2 Mon Sep 17 00:00:00 2001 From: Kristian Rosenvold Date: Thu, 4 Feb 2010 12:12:14 +0000 Subject: [PATCH] Changed to threadsafe Map/Set structures The changed classes have confirmed unsafe concurrent access using failfast-collections git-svn-id: https://svn.apache.org/repos/asf/maven/maven-3/trunk@906463 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/maven/DefaultArtifactFilterManager.java | 5 +++-- .../org/apache/maven/execution/MavenSession.java | 12 +++++++----- .../maven/execution/SessionRepositoryCache.java | 4 ++-- .../apache/maven/plugin/DefaultPluginRealmCache.java | 4 ++-- .../project/artifact/DefaultMavenMetadataCache.java | 5 +++-- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java b/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java index 09feb457f..aa490067b 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java @@ -24,6 +24,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.resolver.filter.ExclusionSetFilter; @@ -49,7 +50,7 @@ public class DefaultArtifactFilterManager static { - Set artifacts = new HashSet(); + List artifacts = new ArrayList(); artifacts.add( "classworlds" ); artifacts.add( "plexus-classworlds" ); @@ -86,7 +87,7 @@ public class DefaultArtifactFilterManager * wagon from their plugin realm. */ - DEFAULT_EXCLUSIONS = artifacts; + DEFAULT_EXCLUSIONS = new CopyOnWriteArraySet( artifacts); } protected Set excludedArtifacts = new HashSet( DEFAULT_EXCLUSIONS ); diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java index 2e26a210e..348953414 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java @@ -23,11 +23,11 @@ import java.util.Arrays; import java.util.Collection; import java.util.Date; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.ConcurrentHashMap; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.RepositoryCache; @@ -69,6 +69,9 @@ public class MavenSession private Collection blackListedProjects; + private final Map>> pluginContextsByProjectAndPluginKey = + new ConcurrentHashMap>> (); + @Deprecated public MavenSession( PlexusContainer container, MavenExecutionRequest request, MavenExecutionResult result, MavenProject project ) { @@ -284,8 +287,7 @@ public MavenExecutionResult getResult() return result; } - private Map>> pluginContextsByProjectAndPluginKey = new HashMap>> (); - + // Backward compat public Map getPluginContext( PluginDescriptor plugin, MavenProject project ) { @@ -295,7 +297,7 @@ public Map getPluginContext( PluginDescriptor plugin, MavenProje if ( pluginContextsByKey == null ) { - pluginContextsByKey = new HashMap>(); + pluginContextsByKey = new ConcurrentHashMap>(); pluginContextsByProjectAndPluginKey.put( projectKey, pluginContextsByKey ); } @@ -306,7 +308,7 @@ public Map getPluginContext( PluginDescriptor plugin, MavenProje if ( pluginContext == null ) { - pluginContext = new HashMap(); + pluginContext = new ConcurrentHashMap(); pluginContextsByKey.put( pluginKey, pluginContext ); } diff --git a/maven-core/src/main/java/org/apache/maven/execution/SessionRepositoryCache.java b/maven-core/src/main/java/org/apache/maven/execution/SessionRepositoryCache.java index 357c38082..e70d8322b 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/SessionRepositoryCache.java +++ b/maven-core/src/main/java/org/apache/maven/execution/SessionRepositoryCache.java @@ -19,8 +19,8 @@ * under the License. */ -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.maven.artifact.repository.RepositoryCache; import org.apache.maven.artifact.repository.RepositoryRequest; @@ -34,7 +34,7 @@ class SessionRepositoryCache implements RepositoryCache { - private Map cache = new HashMap( 256 ); + private Map cache = new ConcurrentHashMap( 256 ); public Object get( RepositoryRequest request, Object key ) { diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java index a6a974d61..f5169ee75 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java @@ -21,10 +21,10 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; @@ -105,7 +105,7 @@ && eq( repositories, other.repositories ) && eq( filter, other.filter ) } } - protected final Map cache = new HashMap(); + protected final Map cache = new ConcurrentHashMap(); public CacheRecord get( Plugin plugin, ClassLoader parentRealm, List parentImports, ArtifactFilter dependencyFilter, ArtifactRepository localRepository, diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java index 814b2d2a3..939fda870 100644 --- a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java +++ b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java @@ -18,13 +18,13 @@ import java.io.File; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; @@ -38,6 +38,8 @@ public class DefaultMavenMetadataCache implements MavenMetadataCache { + protected final Map cache = new ConcurrentHashMap(); + public static class CacheKey { private final Artifact artifact; @@ -286,7 +288,6 @@ public boolean isStale() } } - protected Map cache = new HashMap(); public ResolutionGroup get( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository, List remoteRepositories )