You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2015/07/26 03:23:38 UTC

svn commit: r1692677 - in /commons/proper/dbcp/trunk/src: changes/changes.xml main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java

Author: psteitz
Date: Sun Jul 26 01:23:38 2015
New Revision: 1692677

URL: http://svn.apache.org/r1692677
Log:
Fixed logical connection leak in KeyedCPDSConnectionFactory.

JIRA: DBCP-442

Modified:
    commons/proper/dbcp/trunk/src/changes/changes.xml
    commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
    commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.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=1692677&r1=1692676&r2=1692677&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/changes/changes.xml (original)
+++ commons/proper/dbcp/trunk/src/changes/changes.xml Sun Jul 26 01:23:38 2015
@@ -61,6 +61,10 @@ The <action> type attribute can be add,u
 
   <body>
     <release version="2.1.1" date="TBD" description="Bug fixes.">
+      <action issue="DBCP-442" dev="psteitz" type="fix">
+        SharedPoolDataSource getConnection fails when testOnBorrow is set with
+        a null validation query.
+      </action>
       <action issue="DBCP-438" dev="psteitz" type="fix" due-to="Raihan Kibria">
         Nested connections in a transaction (local) throws null pointer. 
       </action>

Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java?rev=1692677&r1=1692676&r2=1692677&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java (original)
+++ commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java Sun Jul 26 01:23:38 2015
@@ -172,18 +172,23 @@ class KeyedCPDSConnectionFactory
         }
         boolean valid = false;
         PooledConnection pconn = p.getObject().getPooledConnection();
+        Connection conn = null;
+        validatingSet.add(pconn);
         if (null == _validationQuery) {
             int timeout = _validationQueryTimeout;
             if (timeout < 0) {
                 timeout = 0;
             }
             try {
-                valid = pconn.getConnection().isValid(timeout);
+                conn = pconn.getConnection();
+                valid = conn.isValid(timeout);
             } catch (SQLException e) {
                 valid = false;
+            } finally {
+                Utils.closeQuietly(conn);
+                validatingSet.remove(pconn); 
             }
         } else {
-            Connection conn = null;
             Statement stmt = null;
             ResultSet rset = null;
             // logical Connection from the PooledConnection must be closed

Modified: commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java?rev=1692677&r1=1692676&r2=1692677&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java (original)
+++ commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java Sun Jul 26 01:23:38 2015
@@ -162,6 +162,19 @@ public class TestDriverAdapterCPDS {
         pcds.getPooledConnection("foo", "bar").close();
         assertEquals("bar", pcds.getConnectionProperties().getProperty("password"));
     }
+    
+    /**
+     * JIRA: DBCP-442
+     */
+    @Test
+    public void testNullValidationQuery() throws Exception {
+        final SharedPoolDataSource spds = new SharedPoolDataSource();
+        spds.setConnectionPoolDataSource(pcds);
+        spds.setDefaultTestOnBorrow(true);
+        final Connection c = spds.getConnection();
+        c.close();
+        spds.close();
+    }
 
     // https://issues.apache.org/jira/browse/DBCP-376
     @Test