Author: markt
Date: Fri Jan  2 06:24:35 2009
New Revision: 730735

URL: http://svn.apache.org/viewvc?rev=730735&view=rev
Log:
Fix https://issues.apache.org/bugzilla/attachment.cgi?id=23066
Sync issue leads to NPE in rare circumstances
Patch provided by Konstantin Kolinko

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=730735&r1=730734&r2=730735&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Fri Jan 
 2 06:24:35 2009
@@ -1794,7 +1794,11 @@
             return clazz;
 
         synchronized (this) {
-            if (entry.binaryContent == null && entry.loadedClass == null)
+            clazz = entry.loadedClass;
+            if (clazz != null)
+                return clazz;
+
+            if (entry.binaryContent == null)
                 throw new ClassNotFoundException(name);
 
             // Looking up the package
@@ -1843,26 +1847,22 @@
     
             }
 
-            if (entry.loadedClass == null) {
-                try {
-                    clazz = defineClass(name, entry.binaryContent, 0,
-                            entry.binaryContent.length, 
-                            new CodeSource(entry.codeBase, 
entry.certificates));
-                } catch (UnsupportedClassVersionError ucve) {
-                    throw new UnsupportedClassVersionError(
-                            ucve.getLocalizedMessage() + " " +
-                            sm.getString("webappClassLoader.wrongVersion",
-                                    name));
-                }
-                entry.loadedClass = clazz;
-                entry.binaryContent = null;
-                entry.source = null;
-                entry.codeBase = null;
-                entry.manifest = null;
-                entry.certificates = null;
-            } else {
-                clazz = entry.loadedClass;
-            }
+            try {
+                clazz = defineClass(name, entry.binaryContent, 0,
+                        entry.binaryContent.length, 
+                        new CodeSource(entry.codeBase, entry.certificates));
+            } catch (UnsupportedClassVersionError ucve) {
+                throw new UnsupportedClassVersionError(
+                        ucve.getLocalizedMessage() + " " +
+                        sm.getString("webappClassLoader.wrongVersion",
+                                name));
+            }
+            entry.loadedClass = clazz;
+            entry.binaryContent = null;
+            entry.source = null;
+            entry.codeBase = null;
+            entry.manifest = null;
+            entry.certificates = null;
         }
         
         return clazz;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to