You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/10/20 14:35:24 UTC

[sling-org-apache-sling-commons-fsclassloader] 33/33: SLING-7175: Improve concurrency in FSDynamicClassLoader.

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 <pa...@apache.org>
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
"commits@sling.apache.org" <co...@sling.apache.org>.