summaryrefslogtreecommitdiff
path: root/buildstream/_loader/loader.py
diff options
context:
space:
mode:
authorBenjamin Schubert <ben.c.schubert@gmail.com>2019-02-11 15:20:00 +0000
committerBenjamin Schubert <ben.c.schubert@gmail.com>2019-02-13 14:59:47 +0000
commitec4bbf35a159b5d019d6acd84aa5753b794bb7ee (patch)
tree131d80259472beae3a03d7ffcaf3fe77906db4f4 /buildstream/_loader/loader.py
parent54ec032a9664719c2997c35e5353ca455e917fb9 (diff)
downloadbuildstream-ec4bbf35a159b5d019d6acd84aa5753b794bb7ee.tar.gz
Cleanup internal Loader cache after loading elements
Diffstat (limited to 'buildstream/_loader/loader.py')
-rw-r--r--buildstream/_loader/loader.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/buildstream/_loader/loader.py b/buildstream/_loader/loader.py
index d0cfa8522..17d7c63fb 100644
--- a/buildstream/_loader/loader.py
+++ b/buildstream/_loader/loader.py
@@ -152,8 +152,27 @@ class Loader():
#
ret.append(loader._collect_element(element))
+ self._clean_caches()
+
return ret
+ # clean_caches()
+ #
+ # Clean internal loader caches, recursively
+ #
+ # When loading the elements, the loaders use caches in order to not load the
+ # same element twice. These are kept after loading and prevent garbage
+ # collection. Cleaning them explicitely is required.
+ #
+ def _clean_caches(self):
+ for loader in self._loaders.values():
+ # value may be None with nested junctions without overrides
+ if loader is not None:
+ loader._clean_caches()
+
+ self._meta_elements = {}
+ self._elements = {}
+
###########################################
# Private Methods #
###########################################