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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org