]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
a missing cursor.close() here caused a *huge* amount of weird locking issues with...
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 2 Aug 2013 17:27:30 +0000 (13:27 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 2 Aug 2013 17:27:30 +0000 (13:27 -0400)
what is strange is how it only occurred in some very specific places under very
particular conditions, perhaps it has to do with whether or not this cursor gets
gc'ed or not.

lib/sqlalchemy/engine/default.py

index b8c3768a8c4623605986fa2e9d9c74031aafd23d..7b5a2225157813396c88c15d434b5b17ea6d4e03 100644 (file)
@@ -263,14 +263,17 @@ class DefaultDialect(interfaces.Dialect):
             cast_to = util.text_type
 
         cursor = connection.connection.cursor()
-        cursor.execute(
-            cast_to(
-                expression.select([
-                    expression.literal_column("'x'").label("some_label")
-                ]).compile(dialect=self)
+        try:
+            cursor.execute(
+                cast_to(
+                    expression.select([
+                        expression.literal_column("'x'").label("some_label")
+                    ]).compile(dialect=self)
+                )
             )
-        )
-        return isinstance(cursor.description[0][0], util.text_type)
+            return isinstance(cursor.description[0][0], util.text_type)
+        finally:
+            cursor.close()
 
     def type_descriptor(self, typeobj):
         """Provide a database-specific :class:`.TypeEngine` object, given