]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fix rollback behavior with transaction context manager and failed two phase transactions
authorAnts Aasma <ants.aasma@gmail.com>
Sun, 20 Jan 2008 04:31:53 +0000 (04:31 +0000)
committerAnts Aasma <ants.aasma@gmail.com>
Sun, 20 Jan 2008 04:31:53 +0000 (04:31 +0000)
lib/sqlalchemy/orm/session.py

index f32ec25ec24a96df4185b9d23ba0c71754981d58..03471df34131f87ce72c9ac8b7ad0267d6ee322c 100644 (file)
@@ -238,11 +238,7 @@ class SessionTransaction(object):
                 for t in util.Set(self._connections.values()):
                     t[1].prepare()
             except:
-                for t in util.Set(self._connections.values()):
-                    try:
-                        t[1].rollback()
-                    except:
-                        pass
+                self.rollback()
                 raise
         
         self._deactivate()
@@ -310,7 +306,11 @@ class SessionTransaction(object):
         if self.session.transaction is None:
             return
         if type is None:
-            self.commit()
+            try:
+                self.commit()
+            except:
+                self.rollback()
+                raise
         else:
             self.rollback()