diff --git a/mercurial/transaction.py b/mercurial/transaction.py --- a/mercurial/transaction.py +++ b/mercurial/transaction.py @@ -431,6 +431,7 @@ class transaction(object): '''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 @@ class transaction(object): 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 @@ class transaction(object): 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 @@ class transaction(object): 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