Author: markt Date: Fri Feb 1 12:52:06 2013 New Revision: 1441430 URL: http://svn.apache.org/viewvc?rev=1441430&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54497 Make error handling more robust so an error in the leak detection code doesn't prevent the Context from stopping unless the error is fatal to the JVM
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1440622,1441416,1441428 Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1441430&r1=1441429&r2=1441430&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Fri Feb 1 12:52:06 2013 @@ -27,7 +27,6 @@ import java.io.InputStream; import java.lang.ref.Reference; import java.lang.ref.WeakReference; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.MalformedURLException; @@ -2463,27 +2462,11 @@ public class WebappClassLoader } } } - } catch (SecurityException e) { - log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail", - contextName), e); - } catch (NoSuchFieldException e) { - log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail", - contextName), e); - } catch (ClassNotFoundException e) { - log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail", - contextName), e); - } catch (IllegalArgumentException e) { - log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail", - contextName), e); - } catch (IllegalAccessException e) { - log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail", - contextName), e); - } catch (InvocationTargetException e) { - log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail", - contextName), e); - } catch (NoSuchMethodException e) { - log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail", - contextName), e); + } catch (Throwable t) { + ExceptionUtils.handleThrowable(t); + log.warn(sm.getString( + "webappClassLoader.checkThreadLocalsForLeaksFail", + getContextName()), t); } } @@ -2500,18 +2483,19 @@ public class WebappClassLoader Object[] table = (Object[]) internalTableField.get(map); if (table != null) { for (int j =0; j < table.length; j++) { - if (table[j] != null) { + Object obj = table[j]; + if (obj != null) { boolean potentialLeak = false; // Check the key - Object key = ((Reference<?>) table[j]).get(); + Object key = ((Reference<?>) obj).get(); if (this.equals(key) || loadedByThisOrChild(key)) { potentialLeak = true; } // Check the value Field valueField = - table[j].getClass().getDeclaredField("value"); + obj.getClass().getDeclaredField("value"); valueField.setAccessible(true); - Object value = valueField.get(table[j]); + Object value = valueField.get(obj); if (this.equals(value) || loadedByThisOrChild(value)) { potentialLeak = true; } Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1441430&r1=1441429&r2=1441430&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Fri Feb 1 12:52:06 2013 @@ -95,6 +95,11 @@ context.xml file fails. (markt/kkolinko) </fix> <fix> + <bug>54497</bug>: Make memory leak detection code more robust so a + failure in the leak detection code does not prevent the Context from + stopping unless the error is fatal to the JVM. (markt) + </fix> + <fix> <bug>54507</bug>: Do not start the background thread that is used to expiring sessions (amongst other things) until the web application is fully started. Stop the background thread as soon as the web application --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org