Author: kkolinko Date: Tue Apr 20 14:53:28 2010 New Revision: 935947 URL: http://svn.apache.org/viewvc?rev=935947&view=rev Log: Fix http://issues.apache.org/bugzilla/show_bug.cgi?id=44041 and avoid http://issues.apache.org/bugzilla/show_bug.cgi?id=48694 Fix duplicate class definition under load. Avoid possible deadlocks.
Modified: tomcat/tc5.5.x/trunk/STATUS.txt tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/ResourceEntry.java tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml tomcat/tc5.5.x/trunk/jasper/src/share/org/apache/jasper/servlet/JasperLoader.java Modified: tomcat/tc5.5.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/STATUS.txt?rev=935947&r1=935946&r2=935947&view=diff ============================================================================== --- tomcat/tc5.5.x/trunk/STATUS.txt (original) +++ tomcat/tc5.5.x/trunk/STATUS.txt Tue Apr 20 14:53:28 2010 @@ -42,19 +42,6 @@ PATCHES PROPOSED TO BACKPORT: +1: kkolinko, rjung -1: -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=44041 - Threading issue in class loading plus fix for - https://issues.apache.org/bugzilla/show_bug.cgi?id=48694 a potential deadlock - http://people.apache.org/~markt/patches/2010-03-25-bug44041.patch - +1: markt, kkolinko, jfclere - -1: - - Mark ResourceEntry.loadedClass as volatile. - http://svn.apache.org/viewvc?rev=927877&view=rev - +1: kkolinko, markt, rjung - -1: - - * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47878 Return 404's rather than a permanent 500 if a JSP is deleted Make sure first response post deletion is correct Modified: tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/ResourceEntry.java URL: http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/ResourceEntry.java?rev=935947&r1=935946&r2=935947&view=diff ============================================================================== --- tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/ResourceEntry.java (original) +++ tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/ResourceEntry.java Tue Apr 20 14:53:28 2010 @@ -47,7 +47,7 @@ public class ResourceEntry { /** * Loaded class. */ - public Class loadedClass = null; + public volatile Class loadedClass = null; /** Modified: tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java?rev=935947&r1=935946&r2=935947&view=diff ============================================================================== --- tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/tc5.5.x/trunk/container/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java Tue Apr 20 14:53:28 2010 @@ -944,9 +944,7 @@ public class WebappClassLoader } if ((clazz == null) && hasExternalRepositories) { try { - synchronized (this) { - clazz = super.findClass(name); - } + clazz = super.findClass(name); } catch(AccessControlException ace) { log.warn("WebappClassLoader.findClassInternal(" + name + ") security exception: " + ace.getMessage(), ace); @@ -1311,7 +1309,7 @@ public class WebappClassLoader * * @exception ClassNotFoundException if the class was not found */ - public Class loadClass(String name, boolean resolve) + public synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { if (log.isDebugEnabled()) Modified: tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml?rev=935947&r1=935946&r2=935947&view=diff ============================================================================== --- tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml (original) +++ tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml Tue Apr 20 14:53:28 2010 @@ -51,6 +51,11 @@ <subsection name="Catalina"> <changelog> <fix> + <bug>44041</bug>, <bug>48694</bug>: Fix duplicate class definition + under load. Avoid possible deadlock in class loading. + (markt/kkolinko) + </fix> + <fix> <bug>47774</bug>: Ensure web application class loader is used when calling session listeners. (kfujino) </fix> Modified: tomcat/tc5.5.x/trunk/jasper/src/share/org/apache/jasper/servlet/JasperLoader.java URL: http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/jasper/src/share/org/apache/jasper/servlet/JasperLoader.java?rev=935947&r1=935946&r2=935947&view=diff ============================================================================== --- tomcat/tc5.5.x/trunk/jasper/src/share/org/apache/jasper/servlet/JasperLoader.java (original) +++ tomcat/tc5.5.x/trunk/jasper/src/share/org/apache/jasper/servlet/JasperLoader.java Tue Apr 20 14:53:28 2010 @@ -88,7 +88,7 @@ public class JasperLoader extends URLCla * * @exception ClassNotFoundException if the class was not found */ - public Class loadClass(final String name, boolean resolve) + public synchronized Class loadClass(final String name, boolean resolve) throws ClassNotFoundException { Class clazz = null; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org