[PATCH] revlog: document that mmap resources are released implicitly by GC

Yuya Nishihara yuya at tcha.org
Sun Jan 13 06:44:53 UTC 2019


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1547358986 -32400
#      Sun Jan 13 14:56:26 2019 +0900
# Node ID eb6ba8bc27e0f8cc28268d6601b97f2c2a63c1c3
# Parent  81fb0d015830b5ddf89b398aa63e0b56501dc6ac
revlog: document that mmap resources are released implicitly by GC

It's okay-ish, but currently the open fd and the mapping itself are leaked
until the indexdata is deallocated. If revlog had close(), the underlying
resources should be closed there as well, but AFAIK there's no such hook
point.

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -440,6 +440,8 @@ class revlog(object):
             with self._indexfp() as f:
                 if (mmapindexthreshold is not None and
                     self.opener.fstat(f).st_size >= mmapindexthreshold):
+                    # TODO: should .close() to release resources without
+                    # relying on Python GC
                     indexdata = util.buffer(util.mmapread(f))
                 else:
                     indexdata = f.read()


More information about the Mercurial-devel mailing list