Author: markt
Date: Wed Sep 24 10:35:21 2014
New Revision: 1627272

URL: http://svn.apache.org/r1627272
Log:
Pick up improved memory leak fix from Pool 2.

Modified:
    tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/   (props changed)
    
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java
    tomcat/trunk/webapps/docs/changelog.xml

Propchange: tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/
------------------------------------------------------------------------------
  Merged 
/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2:r1627023-1627271

Modified: 
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java?rev=1627272&r1=1627271&r2=1627272&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/BaseGenericObjectPool.java 
Wed Sep 24 10:35:21 2014
@@ -91,8 +91,8 @@ public abstract class BaseGenericObjectP
     private Evictor evictor = null; // @GuardedBy("evictionLock")
     Iterator<PooledObject<T>> evictionIterator = null; // 
@GuardedBy("evictionLock")
     /*
-     * Class loader for evictor thread to use since in a J2EE or similar
-     * environment the context class loader for the evictor thread may have
+     * Class loader for evictor thread to use since, in a JavaEE or similar
+     * environment, the context class loader for the evictor thread may not 
have
      * visibility of the correct factory. See POOL-161. Uses a weak reference 
to
      * avoid potential memory leaks if the Pool is discarded rather than 
closed.
      */
@@ -136,9 +136,14 @@ public abstract class BaseGenericObjectP
         // Populate the creation stack trace
         this.creationStackTrace = getStackTrace(new Exception());
 
-        // save the current CCL to be used later by the evictor Thread
-        factoryClassLoader =
-                new 
WeakReference<>(Thread.currentThread().getContextClassLoader());
+        // save the current TCCL (if any) to be used later by the evictor 
Thread
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if (cl == null) {
+            factoryClassLoader = null;
+        } else {
+            factoryClassLoader = new WeakReference<>(cl);
+        }
+
         fairness = config.getFairness();
     }
 
@@ -998,15 +1003,18 @@ public abstract class BaseGenericObjectP
             ClassLoader savedClassLoader =
                     Thread.currentThread().getContextClassLoader();
             try {
-                // Set the class loader for the factory
-                ClassLoader cl = factoryClassLoader.get();
-                if (cl == null) {
-                    // The pool has been dereferenced and the class loader 
GC'd.
-                    // Cancel this timer so the pool can be GC'd as well.
-                    cancel();
-                    return;
+                if (factoryClassLoader != null) {
+                    // Set the class loader for the factory
+                    ClassLoader cl = factoryClassLoader.get();
+                    if (cl == null) {
+                        // The pool has been dereferenced and the class loader
+                        // GC'd. Cancel this timer so the pool can be GC'd as
+                        // well.
+                        cancel();
+                        return;
+                    }
+                    Thread.currentThread().setContextClassLoader(cl);
                 }
-                Thread.currentThread().setContextClassLoader(cl);
 
                 // Evict from the pool
                 try {

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1627272&r1=1627271&r2=1627272&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Sep 24 10:35:21 2014
@@ -252,7 +252,7 @@
       </fix>
       <fix>
         Update the package renamed copy of Apache Commons Pool 2 to revision
-        1627022 to pick up the fixes since the 2.2 release including some 
memory
+        1627271 to pick up the fixes since the 2.2 release including some 
memory
         leak fixes and support for application provided eviction policies.
         (markt)
       </fix>



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

Reply via email to