You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ke...@apache.org on 2010/03/23 13:09:43 UTC
svn commit: r926532 -
/geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java
Author: kevan
Date: Tue Mar 23 12:09:43 2010
New Revision: 926532
URL: http://svn.apache.org/viewvc?rev=926532&view=rev
Log:
GERONIMO-5200 Fix potential problems caused by concurrent access to HashSet from multiple Threads
Modified:
geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java
Modified: geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java?rev=926532&r1=926531&r2=926532&view=diff
==============================================================================
--- geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java (original)
+++ geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java Tue Mar 23 12:09:43 2010
@@ -31,6 +31,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -61,7 +62,7 @@ public class MultiParentClassLoader exte
private final String[] hiddenResources;
private final String[] nonOverridableResources;
private boolean destroyed = false;
- private Set<String> resourcesNotFound = new HashSet<String>();
+ private Map<String,Object> resourcesNotFound = new ConcurrentHashMap<String,Object>();
// I used this pattern as its temporary and with the static final we get compile time
// optimizations.
@@ -552,7 +553,7 @@ public class MultiParentClassLoader exte
}
public URL getResource(String name) {
- if (isDestroyed() || resourcesNotFound.contains(name)) {
+ if (isDestroyed() || resourcesNotFound.containsKey(name)) {
return null;
}
@@ -594,12 +595,9 @@ public class MultiParentClassLoader exte
//
// Resource not found -- no need to search for it again
+ // Use the name as key and value. We don't care about the value and it needs to be non-null.
//
- if (!resourcesNotFound.contains(name)) {
- synchronized(resourcesNotFound) {
- resourcesNotFound.add(name);
- }
- }
+ resourcesNotFound.put(name, name);
return null;
}