Author: psteitz
Date: Sat Feb 14 01:58:36 2015
New Revision: 1659744

URL: http://svn.apache.org/r1659744
Log:
Eliminated synchronization in BasicDataSource getNumActive, getNumIdle methods.

Modified:
    commons/proper/dbcp/trunk/src/changes/changes.xml
    
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java

Modified: commons/proper/dbcp/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/changes/changes.xml?rev=1659744&r1=1659743&r2=1659744&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/changes/changes.xml (original)
+++ commons/proper/dbcp/trunk/src/changes/changes.xml Sat Feb 14 01:58:36 2015
@@ -115,6 +115,9 @@ The <action> type attribute can be add,u
         Added check to make sure that the PoolingConnectionFactory associated 
with
         a PoolingDataSource is correctly linked with its owning pool.
       </action>
+      <action dev="psteitz" type="update">
+        Eliminated synchronization in BasicDataSource getNumActive, getNumIdle 
methods.
+      </action>
     </release>
     <release version="2.0.1" date="24 May 2014" description="This is a bug fix 
release.">
       <action dev="markt" type="fix">

Modified: 
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
URL: 
http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java?rev=1659744&r1=1659743&r2=1659744&view=diff
==============================================================================
--- 
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
 (original)
+++ 
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
 Sat Feb 14 01:58:36 2015
@@ -976,9 +976,11 @@ public class BasicDataSource implements
      * @return the current number of active connections
      */
     @Override
-    public synchronized int getNumActive() {
-        if (connectionPool != null) {
-            return connectionPool.getNumActive();
+    public int getNumActive() {
+        // Copy reference to avoid NPE if close happens after null check
+        GenericObjectPool<PoolableConnection> pool = connectionPool;
+        if (pool != null) {
+            return pool.getNumActive();
         }
         return 0;
     }
@@ -991,9 +993,11 @@ public class BasicDataSource implements
      * @return the current number of idle connections
      */
     @Override
-    public synchronized int getNumIdle() {
-        if (connectionPool != null) {
-            return connectionPool.getNumIdle();
+    public int getNumIdle() {
+        // Copy reference to avoid NPE if close happens after null check
+        GenericObjectPool<PoolableConnection> pool = connectionPool;
+        if (pool != null) {
+            return pool.getNumIdle();
         }
         return 0;
     }


Reply via email to