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 2014/09/23 15:21:11 UTC

svn commit: r1627008 - /tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/EvictionTimer.java

Author: markt
Date: Tue Sep 23 13:21:10 2014
New Revision: 1627008

URL: http://svn.apache.org/r1627008
Log:
Port code clean up and a memory leak fix from Pool2 trunk

Modified:
    tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/EvictionTimer.java

Modified: tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/EvictionTimer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/EvictionTimer.java?rev=1627008&r1=1627007&r2=1627008&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/EvictionTimer.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/dbcp/pool2/impl/EvictionTimer.java Tue Sep 23 13:21:10 2014
@@ -39,10 +39,10 @@ import java.util.TimerTask;
 class EvictionTimer {
 
     /** Timer instance */
-    private static Timer _timer; //@GuardedBy("this")
+    private static Timer _timer; //@GuardedBy("EvictionTimer.class")
 
     /** Static usage count tracker */
-    private static int _usageCount; //@GuardedBy("this")
+    private static int _usageCount; //@GuardedBy("EvictionTimer.class")
 
     /** Prevent instantiation */
     private EvictionTimer() {
@@ -67,7 +67,7 @@ class EvictionTimer {
             try {
                 AccessController.doPrivileged(new PrivilegedSetTccl(
                         EvictionTimer.class.getClassLoader()));
-                _timer = new Timer("commons-pool-EvictionTimer", true);
+                _timer = AccessController.doPrivileged(new PrivilegedNewEvictionTimer());
             } finally {
                 AccessController.doPrivileged(new PrivilegedSetTccl(ccl));
             }
@@ -129,4 +129,22 @@ class EvictionTimer {
         }
     }
 
+    /**
+     * {@link PrivilegedAction} used to create a new Timer. Creating the timer
+     * with a privileged action means the associated Thread does not inherit the
+     * current access control context. In a container environment, inheriting
+     * the current access control context is likely to result in retaining a
+     * reference to the thread context class loader which would be a memory
+     * leak.
+     */
+    private static class PrivilegedNewEvictionTimer implements PrivilegedAction<Timer> {
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public Timer run() {
+            return new Timer("commons-pool-EvictionTimer", true);
+        }
+    }
 }



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