Fix bug 44041. A small sync is required to prevent attempts to load the same class...
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 10 Dec 2007 22:24:40 +0000 (22:24 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 10 Dec 2007 22:24:40 +0000 (22:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@603074 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/loader/WebappClassLoader.java

index dbc2865..1b7b703 100644 (file)
@@ -167,6 +167,11 @@ public class WebappClassLoader
      */
     boolean antiJARLocking = false; 
     
+    /**
+     * Lock to prevent attempts to load duplicate classes from external
+     * repositories.
+     */
+    private Object lock = new Object();
 
     // ----------------------------------------------------------- Constructors
 
@@ -883,7 +888,9 @@ public class WebappClassLoader
             }
             if ((clazz == null) && hasExternalRepositories) {
                 try {
-                    clazz = super.findClass(name);
+                    synchronized (lock) {
+                        clazz = super.findClass(name);
+                    }
                 } catch(AccessControlException ace) {
                     throw new ClassNotFoundException(name, ace);
                 } catch (RuntimeException e) {