This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-fsclassloader.git
commit 4445810ab2637fef3a7adc20987798537abfaa41 Author: Karl Pauls <[email protected]> AuthorDate: Thu Oct 5 07:54:30 2017 +0000 SLING-7175: Improve concurrency in FSDynamicClassLoader. git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1811166 13f79535-47bb-0310-9956-ffa450edef68 --- .../fsclassloader/impl/FSDynamicClassLoader.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java index d35ae3d..90fe699 100644 --- a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java +++ b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java @@ -23,6 +23,7 @@ import java.net.URLClassLoader; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import org.apache.sling.commons.classloader.DynamicClassLoader; @@ -30,10 +31,9 @@ public class FSDynamicClassLoader extends URLClassLoader implements DynamicClassLoader { - private boolean isDirty = false; + private volatile boolean isDirty = false; - private final Set<String> hit = Collections.synchronizedSet(new HashSet<String>()); - private final Set<String> miss = Collections.synchronizedSet(new HashSet<String>()); + private final Set<String> loads = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>()); private final DynamicClassLoader parentLoader; @@ -55,18 +55,15 @@ public class FSDynamicClassLoader @Override public Class<?> loadClass(final String name) throws ClassNotFoundException { try { - final Class<?> c = super.loadClass(name); - this.hit.add(name); - return c; - } catch (final ClassNotFoundException cnfe) { - this.miss.add(name); - throw cnfe; + return super.loadClass(name); + } finally { + this.loads.add(name); } } public void check(final String className) { if ( !this.isDirty ) { - this.isDirty = hit.contains(className) || miss.contains(className); + this.isDirty = loads.contains(className); } } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
