From: | Mikko Tiihonen <mikko(dot)tiihonen(at)iki(dot)fi> |
---|---|
To: | Kris Jurka <books(at)ejurka(dot)com> |
Cc: | pgsql-jdbc <pgsql-jdbc(at)postgresql(dot)org> |
Subject: | Re: Fix more unit test connection leaks |
Date: | 2007-07-22 08:04:11 |
Message-ID: | 1185091451.1632.91.camel@dual.local |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
On Sat, 2007-07-21 at 21:31 -0400, Kris Jurka wrote:
>
> On Sun, 22 Jul 2007, Mikko Tiihonen wrote:
>
> > I found some more connection leaks from the test cases.
> >
>
> Yeah, I started looking at your original patch and figured there would be
> more, so I enabled the code to report the location of any opened but
> unclosed connections (in the attached hack). Does your latest patch pass
> this test?
Unfortunately it did not. My previous try at ConnectionPoolTest leaks
were unsuccessfull due to the working connection wrapper that the
pool uses.
With this final (third) connection leak patch the unit tests no longer
complain about leaked connections.
Index: org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java
===================================================================
RCS file: /usr/local/cvsroot/pgjdbc/pgjdbc/org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java,v
retrieving revision 1.15
diff -u -r1.15 ConnectionPoolTest.java
--- org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java 11 Jan 2005 08:25:48 -0000 1.15
+++ org/postgresql/test/jdbc2/optional/ConnectionPoolTest.java 22 Jul 2007 07:56:10 -0000
@@ -14,6 +14,7 @@
import org.postgresql.test.TestUtil;
import javax.sql.*;
import java.sql.*;
+import java.util.*;
import java.io.*;
/**
@@ -25,6 +26,8 @@
*/
public class ConnectionPoolTest extends BaseDataSourceTest
{
+ private ArrayList connections = new ArrayList();
+
/**
* Constructor required by JUnit
*/
@@ -48,6 +51,19 @@
bds.setPassword(TestUtil.getPassword());
}
}
+
+ protected void tearDown() throws Exception
+ {
+ for (Iterator i = connections.iterator(); i.hasNext(); ) {
+ PooledConnection c = (PooledConnection) i.next();
+ try {
+ c.close();
+ } catch (Exception ex) {
+ // close throws nullptr or other evil things if the connection
+ // is already closed
+ }
+ }
+ }
/**
* Though the normal client interface is to grab a Connection, in
@@ -61,7 +77,9 @@
// jdbc.optional.ConnectionPool because our ObjectFactory
// returns only the top level class, not the specific
// jdbc2/jdbc3 implementations.
- return ((PGConnectionPoolDataSource)bds).getPooledConnection();
+ PooledConnection c = ((PGConnectionPoolDataSource)bds).getPooledConnection();
+ connections.add(c);
+ return c;
}
/**
From | Date | Subject | |
---|---|---|---|
Next Message | Mikko Tiihonen | 2007-07-23 07:38:25 | Fix database metadata tuple copying to work with binary data |
Previous Message | Mikko Tiihonen | 2007-07-22 07:33:20 | Miscellaneous small fixes |