From f1a82e45fc177cec8cffcfe3ff970560d272d0bf Mon Sep 17 00:00:00 2001 From: Kostis Anagnostopoulos Date: Fri, 28 Oct 2016 12:21:43 +0200 Subject: fix(leaks): repo context-man to cleanup global mman on repo-delete Improve API for problems like #553. --- git/repo/base.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'git/repo/base.py') diff --git a/git/repo/base.py b/git/repo/base.py index 0f85e3d9..a9f90a17 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -33,6 +33,8 @@ from git.util import Actor, finalize_process, decygpath, hex_to_bin import os.path as osp from .fun import rev_parse, is_git_dir, find_submodule_git_dir, touch +import gc +import gitdb log = logging.getLogger(__name__) @@ -177,9 +179,21 @@ class Repo(object): args.append(self.git) self.odb = odbt(*args) + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + def __del__(self): + self.close() + + def close(self): if self.git: self.git.clear_cache() + gc.collect() + gitdb.util.mman.collect() + gc.collect() def __eq__(self, rhs): if isinstance(rhs, Repo): -- cgit v1.2.1