diff -r c183f7b79541 -r e219dbfd0342 mercurial/localrepo.py --- a/mercurial/localrepo.py Sun Jan 17 12:10:30 2016 -0800 +++ b/mercurial/localrepo.py Sun Jan 17 14:14:15 2016 -0800 @@ -1085,9 +1085,15 @@ def txnclosehook(tr2): """To be run if transaction is successful, will schedule a hook run """ + # Don't reference tr2 in hook() so we don't hold a reference. + # This reduces memory consumption when there are multiple + # transactions per lock. This can likely go away if issue5045 + # fixes the function accumulation. + hookargs = tr2.hookargs + def hook(): reporef().hook('txnclose', throw=False, txnname=desc, - **tr2.hookargs) + **hookargs) reporef()._afterlock(hook) tr.addfinalize('txnclose-hook', txnclosehook) def txnaborthook(tr2):