From: Mike Bayer Date: Fri, 2 Aug 2013 17:27:30 +0000 (-0400) Subject: a missing cursor.close() here caused a *huge* amount of weird locking issues with... X-Git-Tag: rel_0_9_0b1~151 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=58b4b8890786b4684fdff217b2ce7fd89b0bf113;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git a missing cursor.close() here caused a *huge* amount of weird locking issues with pypy, 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. --- diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index b8c3768a8c..7b5a222515 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -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