D4053: [RFC]hgweb: garbage collect on every request in hgweb_mod too
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Thu Aug 2 11:58:01 EDT 2018
pulkit updated this revision to Diff 9792.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D4053?vs=9787&id=9792
REVISION DETAIL
https://phab.mercurial-scm.org/D4053
AFFECTED FILES
mercurial/hgweb/hgweb_mod.py
CHANGE DETAILS
diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py
--- a/mercurial/hgweb/hgweb_mod.py
+++ b/mercurial/hgweb/hgweb_mod.py
@@ -9,6 +9,7 @@
from __future__ import absolute_import
import contextlib
+import gc
import os
from .common import (
@@ -305,8 +306,19 @@
with self._obtainrepo() as repo:
profile = repo.ui.configbool('profiling', 'enabled')
with profiling.profile(repo.ui, enabled=profile):
- for r in self._runwsgi(req, res, repo):
- yield r
+ try:
+ for r in self._runwsgi(req, res, repo):
+ yield r
+ finally:
+ # There are known cycles in localrepository that prevent
+ # those objects (and tons of held references) from being
+ # collected through normal refcounting. We mitigate those
+ # leaks by performing an explicit GC on every request.
+ # TODO remove this once leaks are fixed.
+ # TODO only run this on requests that create localrepository
+ # instances instead of every request.
+ gc.collect()
+
def _runwsgi(self, req, res, repo):
rctx = requestcontext(self, repo, req, res)
To: pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list