diff -r 3fdcc34c0aba -r aa91085cadf3 mercurial/transaction.py --- a/mercurial/transaction.py Fri May 19 13:16:15 2017 -0700 +++ b/mercurial/transaction.py Fri May 26 13:27:21 2017 -0700 @@ -431,6 +431,7 @@ '''commit the transaction''' if self.count == 1: self.validator(self) # will raise exception if needed + self.validator = None # Help prevent cycles. self._generatefiles(group=gengroupprefinalize) categories = sorted(self._finalizecallback) for cat in categories: @@ -464,6 +465,7 @@ self._writeundo() if self.after: self.after() + self.after = None # Help prevent cycles. if self.opener.isfile(self._backupjournal): self.opener.unlink(self._backupjournal) if self.opener.isfile(self.journal): @@ -487,6 +489,7 @@ self.journal = None self.releasefn(self, True) # notify success of closing transaction + self.releasefn = None # Help prevent cycles. # run post close action categories = sorted(self._postclosecallback) @@ -557,6 +560,7 @@ finally: self.journal = None self.releasefn(self, False) # notify failure of transaction + self.releasefn = None # Help prevent cycles. def rollback(opener, vfsmap, file, report): """Rolls back the transaction contained in the given file