server/session.py
changeset 5891 99024ad59223
parent 5849 9db65b381028
child 5894 7510cc3bbdbb
--- a/server/session.py	Mon Jul 05 18:00:33 2010 +0200
+++ b/server/session.py	Mon Jul 05 18:25:19 2010 +0200
@@ -747,7 +747,7 @@
                         self.pending_operations[:] = processed
                         self.debug('%s session %s done', trstate, self.id)
                     except:
-                        self.exception('error while %sing', trstate)
+                        self.critical('error while %sing', trstate, exc_info=True)
                         # if error on [pre]commit:
                         #
                         # * set .failed = True on the operation causing the failure
@@ -759,8 +759,12 @@
                         # instead of having to implements rollback, revertprecommit
                         # and revertcommit, that will be enough in mont case.
                         operation.failed = True
-                        for operation in processed:
-                            operation.handle_event('revert%s_event' % trstate)
+                        for operation in reversed(processed):
+                            try:
+                                operation.handle_event('revert%s_event' % trstate)
+                            except:
+                                self.critical('error while reverting %sing', trstate,
+                                              exc_info=True)
                         # XXX use slice notation since self.pending_operations is a
                         # read-only property.
                         self.pending_operations[:] = processed + self.pending_operations