You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/06/01 18:59:14 UTC
svn commit: r950164 - in /tomcat/trunk:
java/org/apache/catalina/core/StandardContext.java
java/org/apache/catalina/loader/WebappClassLoader.java
java/org/apache/catalina/loader/WebappLoader.java
webapps/docs/config/context.xml
Author: markt
Date: Tue Jun 1 16:59:14 2010
New Revision: 950164
URL: http://svn.apache.org/viewvc?rev=950164&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48971
Make stopping of TimerThreads optional and disabled by default
Modified:
tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
tomcat/trunk/webapps/docs/config/context.xml
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=950164&r1=950163&r2=950164&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Tue Jun 1 16:59:14 2010
@@ -759,9 +759,16 @@ public class StandardContext extends Con
* instability. As such, enabling this should be viewed as an option of last
* resort in a development environment and is not recommended in a
* production environment. If not specified, the default value of
- * <code>false</code> will be used.
+ * <code>false</code> will be used.
*/
private boolean clearReferencesStopThreads = false;
+
+ /**
+ * Should Tomcat attempt to terminate any {@link java.util.TimerThread}s
+ * that have been started by the web application? If not specified, the
+ * default value of <code>false</code> will be used.
+ */
+ private boolean clearReferencesStopTimerThreads = false;
/**
* Should Tomcat attempt to clear any ThreadLocal objects that are instances
@@ -2309,6 +2316,31 @@ public class StandardContext extends Con
/**
+ * Return the clearReferencesStopTimerThreads flag for this Context.
+ */
+ public boolean getClearReferencesStopTimerThreads() {
+ return (this.clearReferencesStopTimerThreads);
+ }
+
+
+ /**
+ * Set the clearReferencesStopTimerThreads feature for this Context.
+ *
+ * @param clearReferencesStopTimerThreads The new flag value
+ */
+ public void setClearReferencesStopTimerThreads(
+ boolean clearReferencesStopTimerThreads) {
+
+ boolean oldClearReferencesStopTimerThreads =
+ this.clearReferencesStopTimerThreads;
+ this.clearReferencesStopTimerThreads = clearReferencesStopTimerThreads;
+ support.firePropertyChange("clearReferencesStopTimerThreads",
+ oldClearReferencesStopTimerThreads,
+ this.clearReferencesStopTimerThreads);
+ }
+
+
+ /**
* Return the clearReferencesThreadLocals flag for this Context.
*/
public boolean getClearReferencesThreadLocals() {
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=950164&r1=950163&r2=950164&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Tue Jun 1 16:59:14 2010
@@ -444,13 +444,18 @@ public class WebappClassLoader
* instability. As such, enabling this should be viewed as an option of last
* resort in a development environment and is not recommended in a
* production environment. If not specified, the default value of
- * <code>false</code> will be used. Note that instances of
- * java.util.TimerThread will always be terminate since a safe method exists
- * to do so.
+ * <code>false</code> will be used.
*/
private boolean clearReferencesStopThreads = false;
/**
+ * Should Tomcat attempt to terminate any {@link java.util.TimerThread}s
+ * that have been started by the web application? If not specified, the
+ * default value of <code>false</code> will be used.
+ */
+ private boolean clearReferencesStopTimerThreads = false;
+
+ /**
* Should Tomcat attempt to clear any ThreadLocal objects that are instances
* of classes loaded by this class loader. Failure to remove any such
* objects will result in a memory leak on web application stop, undeploy or
@@ -707,6 +712,25 @@ public class WebappClassLoader
/**
+ * Return the clearReferencesStopTimerThreads flag for this Context.
+ */
+ public boolean getClearReferencesStopTimerThreads() {
+ return (this.clearReferencesStopTimerThreads);
+ }
+
+
+ /**
+ * Set the clearReferencesStopTimerThreads feature for this Context.
+ *
+ * @param clearReferencesStopTimerThreads The new flag value
+ */
+ public void setClearReferencesStopTimerThreads(
+ boolean clearReferencesStopTimerThreads) {
+ this.clearReferencesStopTimerThreads = clearReferencesStopTimerThreads;
+ }
+
+
+ /**
* Return the clearReferencesLogFactoryRelease flag for this Context.
*/
public boolean getClearReferencesLogFactoryRelease() {
@@ -714,6 +738,16 @@ public class WebappClassLoader
}
+ /**
+ * Set the clearReferencesLogFactoryRelease feature for this Context.
+ *
+ * @param clearReferencesLogFactoryRelease The new flag value
+ */
+ public void setClearReferencesLogFactoryRelease(
+ boolean clearReferencesLogFactoryRelease) {
+ this.clearReferencesLogFactoryRelease =
+ clearReferencesLogFactoryRelease;
+ }
/**
@@ -735,18 +769,6 @@ public class WebappClassLoader
}
- /**
- * Set the clearReferencesLogFactoryRelease feature for this Context.
- *
- * @param clearReferencesLogFactoryRelease The new flag value
- */
- public void setClearReferencesLogFactoryRelease(
- boolean clearReferencesLogFactoryRelease) {
- this.clearReferencesLogFactoryRelease =
- clearReferencesLogFactoryRelease;
- }
-
-
// ------------------------------------------------------- Reloader Methods
@@ -2152,9 +2174,10 @@ public class WebappClassLoader
continue;
}
- // TimerThread is not normally visible
+ // TimerThread can be stopped safely so treat separately
if (thread.getClass().getName().equals(
- "java.util.TimerThread")) {
+ "java.util.TimerThread") &&
+ clearReferencesStopTimerThreads) {
clearReferencesStopTimerThread(thread);
continue;
}
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=950164&r1=950163&r2=950164&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Tue Jun 1 16:59:14 2010
@@ -576,6 +576,8 @@ public class WebappLoader extends Lifecy
((StandardContext) container).getClearReferencesStatic());
classLoader.setClearReferencesStopThreads(
((StandardContext) container).getClearReferencesStopThreads());
+ classLoader.setClearReferencesStopTimerThreads(
+ ((StandardContext) container).getClearReferencesStopTimerThreads());
classLoader.setClearReferencesThreadLocals(
((StandardContext) container).getClearReferencesThreadLocals());
}
Modified: tomcat/trunk/webapps/docs/config/context.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/context.xml?rev=950164&r1=950163&r2=950164&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/context.xml (original)
+++ tomcat/trunk/webapps/docs/config/context.xml Tue Jun 1 16:59:14 2010
@@ -434,6 +434,14 @@
default value of <code>false</code> will be used.</p>
</attribute>
+ <attribute name="clearReferencesStopTimerThreads" required = "false">
+ <p>If <code>true</code>, Tomcat attempts to terminate
+ <code>java.util.Timer</code>threads that have been started by the web
+ application. Unlike standard threads, timer threads can be stopped
+ safely although there may still be side-effects for the application. If
+ not specified, the default value of <code>false</code> will be used.</p>
+ </attribute>
+
<attribute name="clearReferencesThreadLocals" required="false">
<p>If <code>true</code>, Tomcat attempts to clear any ThreadLocal
objects that are instances of classes loaded by this class loader.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org