diff options
-rwxr-xr-x | bin/ebuild | 1 | ||||
-rw-r--r-- | pym/portage/__init__.py | 29 |
2 files changed, 29 insertions, 1 deletions
diff --git a/bin/ebuild b/bin/ebuild index e3e8c6b34..9ad17e83d 100755 --- a/bin/ebuild +++ b/bin/ebuild @@ -147,7 +147,6 @@ if ebuild_portdir != vdb_path and \ encoding=_encodings['content'], errors='strict') print("Appending %s to PORTDIR_OVERLAY..." % ebuild_portdir) - portage.close_portdbapi_caches() imp.reload(portage) # Constrain eclass resolution to the master(s) diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 9e8298ef7..515a9a7a2 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -576,6 +576,35 @@ if VERSION == 'HEAD': return VERSION VERSION = _LazyVersion() +if "_legacy_globals_constructed" in globals(): + # The module has been reloaded, so perform any relevant cleanup + # and prevent memory leaks. + if "db" in _legacy_globals_constructed: + try: + db + except NameError: + pass + else: + if isinstance(db, dict) and db: + for _x in db.values(): + try: + if "porttree" in _x.lazy_items: + continue + except (AttributeError, TypeError): + continue + try: + _x = _x["porttree"].dbapi + except (AttributeError, KeyError): + continue + if not isinstance(_x, portdbapi): + continue + _x.close_caches() + try: + portdbapi.portdbapi_instances.remove(_x) + except ValueError: + pass + del _x + class _LegacyGlobalProxy(proxy.objectproxy.ObjectProxy): __slots__ = ('_name',) |