]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
improve the close handling here so that we don't double-close a connection;
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 29 Jun 2013 02:29:45 +0000 (22:29 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 29 Jun 2013 02:32:43 +0000 (22:32 -0400)
we log this now so it apparently happens a bunch

lib/sqlalchemy/testing/engines.py

index 26f56101627746fd010604c2ed707ea7501673fe..7de29a2bbdd5e7252884829ea4a71eb3d082d92a 100644 (file)
@@ -21,7 +21,7 @@ class ConnectionKiller(object):
         self.testing_engines[engine] = True
 
     def connect(self, dbapi_conn, con_record):
-        self.conns.add(dbapi_conn)
+        self.conns.add((dbapi_conn, con_record))
 
     def checkout(self, dbapi_con, con_record, con_proxy):
         self.proxy_refs[con_proxy] = True
@@ -51,9 +51,10 @@ class ConnectionKiller(object):
         # this can cause a deadlock with pg8000 - pg8000 acquires
         # prepared statment lock inside of rollback() - if async gc
         # is collecting in finalize_fairy, deadlock.
-        # not sure if this should be if pypy/jython only
-        #for conn in self.conns:
-        #    self._safe(conn.rollback)
+        # not sure if this should be if pypy/jython only.
+        # note that firebird/fdb definitely needs this though
+        for conn, rec in self.conns:
+            self._safe(conn.rollback)
 
     def _stop_test_ctx(self):
         if config.options.low_connections:
@@ -72,8 +73,10 @@ class ConnectionKiller(object):
 
     def _stop_test_ctx_aggressive(self):
         self.close_all()
-        for conn in self.conns:
+        for conn, rec in self.conns:
             self._safe(conn.close)
+            rec.connection = None
+            
         self.conns = set()
         for rec in self.testing_engines.keys():
             rec.dispose()