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: [email protected]
For additional commands, e-mail: [email protected]