Author: markt
Date: Tue Apr 20 17:30:19 2010
New Revision: 936007

URL: http://svn.apache.org/viewvc?rev=936007&view=rev
Log:
* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48895
Make clearing thread locals optional and disabled by default since it isn't 
thread-safe

Modified:
    tomcat/tc6.0.x/trunk/   (props changed)
    tomcat/tc6.0.x/trunk/STATUS.txt
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java
    tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
    tomcat/tc6.0.x/trunk/webapps/docs/config/context.xml

Propchange: tomcat/tc6.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Apr 20 17:30:19 2010
@@ -1 +1 @@
-/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,77
 
0809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,8901
 
39,890265,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918594,918684,918787,918792,918799,918885,919851,919914,920025,920055,920298,920449,920596,931709
+/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,77
 
0809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,8901
 
39,890265,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918594,918684,918787,918792,918799,918885,919851,919914,920025,920055,920298,920449,920596,928798,931709

Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=936007&r1=936006&r2=936007&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Tue Apr 20 17:30:19 2010
@@ -222,13 +222,6 @@ PATCHES PROPOSED TO BACKPORT:
   +1: kkolinko
   -1:
 
-* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48895
-  Make clearing thread locals optional and disabled by default since it isn't
-  thread-safe
-  http://svn.apache.org/viewvc?rev=928798&view=rev
-  +1: markt, kkolinko, rjung
-  -1: 
-
 * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48917
   Correct name of mod_jk module in ApacheConfig
   https://issues.apache.org/bugzilla/attachment.cgi?id=25132

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java?rev=936007&r1=936006&r2=936007&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java Tue 
Apr 20 17:30:19 2010
@@ -718,7 +718,16 @@ public class StandardContext
      * <code>false</code> will be used. 
      */
     private boolean clearReferencesStopThreads = 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
+     * reload. It is disabled by default since the clearing of the ThreadLocal
+     * objects is not performed in a thread-safe manner.
+     */
+    private boolean clearReferencesThreadLocals = false;
+    
     // ----------------------------------------------------- Context Properties
 
 
@@ -2049,6 +2058,34 @@ public class StandardContext
     }
 
 
+    /**
+     * Return the clearReferencesThreadLocals flag for this Context.
+     */
+    public boolean getClearReferencesThreadLocals() {
+
+        return (this.clearReferencesThreadLocals);
+
+    }
+
+
+    /**
+     * Set the clearReferencesStopThreads feature for this Context.
+     *
+     * @param clearReferencesStopThreads The new flag value
+     */
+    public void setClearReferencesThreadLocals(
+            boolean clearReferencesThreadLocals) {
+
+        boolean oldClearReferencesThreadLocals =
+            this.clearReferencesThreadLocals;
+        this.clearReferencesThreadLocals = clearReferencesThreadLocals;
+        support.firePropertyChange("clearReferencesStopThreads",
+                                   oldClearReferencesThreadLocals,
+                                   this.clearReferencesThreadLocals);
+
+    }
+
+
     // -------------------------------------------------------- Context Methods
 
 

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties?rev=936007&r1=936006&r2=936007&view=diff
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties 
(original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties 
Tue Apr 20 17:30:19 2010
@@ -38,8 +38,10 @@ webappClassLoader.clearReferencesResourc
 webappClassLoader.clearReferencesResourceBundlesFail=Failed to clear 
ResourceBundle references for web application [{0}]
 webappClassLoader.clearRmiInfo=Failed to find class sun.rmi.transport.Target 
to clear context class loader for web application [{0}]. This is expected on 
non-Sun JVMs.
 webappClassLoader.clearRmiFail=Failed to clear context class loader referenced 
from sun.rmi.transport.Target for web application [{0}]
-webappClassLoader.clearThreadLocalDebug=The web application [{0}] created a 
ThreadLocal with key of type [{1}] (value [{2}]). The ThreadLocal has been 
correctly set to null and the key will be removed by GC. However, to simplify 
the process of tracing memory leaks, the key has been forcibly removed.
-webappClassLoader.clearThreadLocal=The web application [{0}] created a 
ThreadLocal with key of type [{1}] (value [{2}]) and a value of type [{3}] 
(value [{4}]) but failed to remove it when the web application was stopped. To 
prevent a memory leak, the ThreadLocal has been forcibly removed.
+webappClassLoader.clearThreadLocalDebug=The web application [{0}] created a 
ThreadLocal with key of type [{1}] (value [{2}]). The ThreadLocal has been 
correctly set to null and the key will be removed by GC.
+webappClassLoader.clearThreadLocal=The web application [{0}] created a 
ThreadLocal with key of type [{1}] (value [{2}]) and a value of type [{3}] 
(value [{4}]) but failed to remove it when the web application was stopped. 
This is very likely to create a memory leak.
+webappClassLoader.clearThreadLocalDebugClear=To simplify the process of 
tracing memory leaks, the key has been forcibly removed.
+webappClassLoader.clearThreadLocalClear=To prevent a memory leak, the 
ThreadLocal has been forcibly removed.
 webappClassLoader.clearThreadLocalFail=Failed to clear ThreadLocal references 
for web application [{0}]
 webappClassLoader.stopThreadFail=Failed to terminate thread named [{0}] for 
web application [{1}]
 webappClassLoader.stopTimerThreadFail=Failed to terminate TimerThread named 
[{0}] for web application [{1}]

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=936007&r1=936006&r2=936007&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java 
Tue Apr 20 17:30:19 2010
@@ -452,6 +452,15 @@ public class WebappClassLoader
     private boolean clearReferencesStopThreads = 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
+     * reload. It is disabled by default since the clearing of the ThreadLocal
+     * objects is not performed in a thread-safe manner.
+     */
+    private boolean clearReferencesThreadLocals = false;
+    
+    /**
      * Should Tomcat call {...@link 
org.apache.juli.logging.LogFactory#release()}
      * when the class loader is stopped? If not specified, the default value
      * of <code>true</code> is used. Changing the default setting is likely to
@@ -664,6 +673,27 @@ public class WebappClassLoader
      }
 
 
+
+
+     /**
+      * Return the clearReferencesThreadLocals flag for this Context.
+      */
+     public boolean getClearReferencesThreadLocals() {
+         return (this.clearReferencesThreadLocals);
+     }
+
+
+     /**
+      * Set the clearReferencesThreadLocals feature for this Context.
+      *
+      * @param clearReferencesThreadLocals The new flag value
+      */
+     public void setClearReferencesThreadLocals(
+             boolean clearReferencesThreadLocals) {
+         this.clearReferencesThreadLocals = clearReferencesThreadLocals;
+     }
+
+
      /**
       * Set the clearReferencesLogFactoryRelease feature for this Context.
       *
@@ -2222,16 +2252,26 @@ public class WebappClassLoader
                                     log.debug(sm.getString(
                                             
"webappClassLoader.clearThreadLocalDebug",
                                             args));
+                                    if (clearReferencesThreadLocals) {
+                                        log.debug(sm.getString(
+                                                
"webappClassLoader.clearThreadLocalDebugClear"));
+                                    }
                                 }
                             } else {
                                 log.error(sm.getString(
                                         "webappClassLoader.clearThreadLocal",
                                         args));
+                                if (clearReferencesThreadLocals) {
+                                    log.info(sm.getString(
+                                            
"webappClassLoader.clearThreadLocalClear"));
+                                }
                             }
-                            if (key == null) {
-                              staleEntriesCount++;
-                            } else {
-                              mapRemove.invoke(map, key);
+                            if (clearReferencesThreadLocals) {
+                                if (key == null) {
+                                  staleEntriesCount++;
+                                } else {
+                                  mapRemove.invoke(map, key);
+                                }
                             }
                         }
                     }

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=936007&r1=936006&r2=936007&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java Tue 
Apr 20 17:30:19 2010
@@ -643,6 +643,8 @@ public class WebappLoader
                         ((StandardContext) container).getAntiJARLocking());
                 classLoader.setClearReferencesStopThreads(
                         ((StandardContext) 
container).getClearReferencesStopThreads());
+                classLoader.setClearReferencesThreadLocals(
+                        ((StandardContext) 
container).getClearReferencesThreadLocals());
             }
 
             for (int i = 0; i < repositories.length; i++) {

Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=936007&r1=936006&r2=936007&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Tue Apr 20 17:30:19 2010
@@ -69,6 +69,11 @@
         number of active session. (markt/kkolinko)
       </fix>
       <fix>
+        <bug>48895</bug>: Make clearing of ThreadLocals that are causing memory
+        leaks on web application stop, reload or undeploy configurable since 
the
+        process of clearing them is not thread-safe. (markt)
+      </fix>
+      <fix>
         <bug>49018</bug>: Fix processing of time argument in the Expire 
sessions 
         action in the Manager web application. (kkolinko)
       </fix>

Modified: tomcat/tc6.0.x/trunk/webapps/docs/config/context.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/config/context.xml?rev=936007&r1=936006&r2=936007&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/config/context.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/config/context.xml Tue Apr 20 17:30:19 
2010
@@ -343,6 +343,15 @@
         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.
+        Failure to remove any such objects will result in a memory leak on web
+        application stop, undeploy or reload.  If not specified, the default
+        value of <code>false</code> will be used since the clearing of the
+        ThreadLocal objects is not performed in a thread-safe manner.</p>
+      </attribute>
+
       <attribute name="processTlds" required="false">
         <p>Whether the context should process TLDs on startup.  The default
         is true.  The false setting is intended for special cases



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to