From 244ba0b57aa1bf8fd4b33ea078ad0ab83bee8bd7 Mon Sep 17 00:00:00 2001 From: markt Date: Fri, 2 Jan 2009 14:24:35 +0000 Subject: [PATCH] Fix https://issues.apache.org/bugzilla/attachment.cgi?id=23066 Sync issue leads to NPE in rare circumstances Patch provided by Konstantin Kolinko git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@730735 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/loader/WebappClassLoader.java | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/java/org/apache/catalina/loader/WebappClassLoader.java b/java/org/apache/catalina/loader/WebappClassLoader.java index 5a911453b..6988bc105 100644 --- a/java/org/apache/catalina/loader/WebappClassLoader.java +++ b/java/org/apache/catalina/loader/WebappClassLoader.java @@ -1794,7 +1794,11 @@ public class WebappClassLoader 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 @@ public class WebappClassLoader } - 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; -- 2.11.0