Author: markt
Date: Fri Nov 9 11:49:37 2018
New Revision: 1846236
URL: http://svn.apache.org/viewvc?rev=1846236&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=62897
Provide a property clearReferencesThreadLocals on the standard Context
implementation that enables the check for memory leaks via ThreadLocals to be
disabled because this check depends on the use of an API that has been
deprecated in later versions of Java.
Modified:
tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
tomcat/trunk/webapps/docs/changelog.xml
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=1846236&r1=1846235&r2=1846236&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Fri Nov 9
11:49:37 2018
@@ -743,6 +743,12 @@ public class StandardContext extends Con
private boolean clearReferencesObjectStreamClassCaches = true;
/**
+ * Should Tomcat attempt to clear references to classes loaded by this
class
+ * loader from ThreadLocals?
+ */
+ private boolean clearReferencesThreadLocals = true;
+
+ /**
* Should Tomcat skip the memory leak checks when the web application is
* stopped as part of the process of shutting down the JVM?
*/
@@ -2697,6 +2703,20 @@ public class StandardContext extends Con
}
+ public boolean getClearReferencesThreadLocals() {
+ return clearReferencesThreadLocals;
+ }
+
+
+ public void setClearReferencesThreadLocals(boolean
clearReferencesThreadLocals) {
+ boolean oldClearReferencesThreadLocals =
this.clearReferencesThreadLocals;
+ this.clearReferencesThreadLocals = clearReferencesThreadLocals;
+ support.firePropertyChange("clearReferencesThreadLocals",
+ oldClearReferencesThreadLocals,
+ this.clearReferencesThreadLocals);
+ }
+
+
public boolean getSkipMemoryLeakChecksOnJvmShutdown() {
return skipMemoryLeakChecksOnJvmShutdown;
}
@@ -4967,8 +4987,10 @@ public class StandardContext extends Con
getClearReferencesHttpClientKeepAliveThread());
setClassLoaderProperty("clearReferencesObjectStreamClassCaches",
getClearReferencesObjectStreamClassCaches());
- setClassLoaderProperty("skipMemoryLeakChecksOnJvmShutdown",
- getSkipMemoryLeakChecksOnJvmShutdown());
+
setClassLoaderProperty("clearReferencesObjectStreamClassCaches",
+ getClearReferencesObjectStreamClassCaches());
+ setClassLoaderProperty("clearReferencesThreadLocals",
+ getClearReferencesThreadLocals());
// By calling unbindThread and bindThread in a row, we setup
the
// current Thread CCL to be the webapp classloader
Modified: tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml?rev=1846236&r1=1846235&r2=1846236&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml (original)
+++ tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml Fri Nov
9 11:49:37 2018
@@ -94,6 +94,10 @@
description="Should Tomcat attempt to terminate TimerThreads
that have been started by the web application? Advisable to be used only in a
development environment."
type="boolean"/>
+ <attribute name="clearReferencesThreadLocals"
+ description="Should Tomcat attempt to clear ThreadLocal
variables that have been populated with classes loaded by the web application?"
+ type="boolean"/>
+
<attribute name="configFile"
description="Location of the context.xml resource or file"
type="java.net.URL"/>
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1846236&r1=1846235&r2=1846236&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Fri
Nov 9 11:49:37 2018
@@ -370,6 +370,12 @@ public abstract class WebappClassLoaderB
private boolean clearReferencesObjectStreamClassCaches = true;
/**
+ * Should Tomcat attempt to clear references to classes loaded by this
class
+ * loader from ThreadLocals?
+ */
+ private boolean clearReferencesThreadLocals = true;
+
+ /**
* Should Tomcat skip the memory leak checks when the web application is
* stopped as part of the process of shutting down the JVM?
*/
@@ -621,6 +627,16 @@ public abstract class WebappClassLoaderB
}
+ public boolean getClearReferencesThreadLocals() {
+ return clearReferencesThreadLocals;
+ }
+
+
+ public void setClearReferencesThreadLocals(boolean
clearReferencesThreadLocals) {
+ this.clearReferencesThreadLocals = clearReferencesThreadLocals;
+ }
+
+
public boolean getSkipMemoryLeakChecksOnJvmShutdown() {
return skipMemoryLeakChecksOnJvmShutdown;
}
@@ -1587,7 +1603,9 @@ public abstract class WebappClassLoaderB
}
// Check for leaks triggered by ThreadLocals loaded by this class
loader
- checkThreadLocalsForLeaks();
+ if (clearReferencesThreadLocals) {
+ checkThreadLocalsForLeaks();
+ }
// Clear RMI Targets loaded by this class loader
if (clearReferencesRmiTargets) {
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1846236&r1=1846235&r2=1846236&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Nov 9 11:49:37 2018
@@ -88,6 +88,14 @@
configuration files using the ConfigurationSource API. JASPIC and
storeconfig remain file based. (remm)
</update>
+ <add>
+ <bug>62897</bug>: Provide a property
+ (<code>clearReferencesThreadLocals</code>) on the standard
+ <code>Context</code> implementation that enables the check for memory
+ leaks via <code>ThreadLocal</code>s to be disabled because this check
+ depends on the use of an API that has been deprecated in later versions
+ of Java. (markt)
+ </add>
</changelog>
</subsection>
<subsection name="Coyote">
Modified: tomcat/trunk/webapps/docs/config/context.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/context.xml?rev=1846236&r1=1846235&r2=1846236&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/context.xml (original)
+++ tomcat/trunk/webapps/docs/config/context.xml Fri Nov 9 11:49:37 2018
@@ -776,6 +776,13 @@
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
+ <code>java.lang.ThreadLocal</code> variables that have been populated
+ with classes loaded by the web application. If not specified, the
+ default value of <code>true</code> will be used.</p>
+ </attribute>
+
<attribute name="copyXML" required="false">
<p>Set to <code>true</code> if you want a context XML descriptor
embedded inside the application (located at
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]