summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/bb/cooker.py3
-rw-r--r--lib/bb/siggen.py11
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index 911805a6e..d2d308ae2 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -1944,7 +1944,8 @@ class Parser(multiprocessing.Process):
except IndexError:
break
result = self.parse(*job)
-
+ # Clear the siggen cache after parsing to control memory usage, its huge
+ bb.parse.siggen.postparsing_clean_cache()
try:
self.results.put(result, timeout=0.25)
except queue.Full:
diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py
index ffd8fcaf3..c2d0c736c 100644
--- a/lib/bb/siggen.py
+++ b/lib/bb/siggen.py
@@ -51,6 +51,9 @@ class SignatureGenerator(object):
def finalise(self, fn, d, varient):
return
+ def postparsing_clean_cache(self):
+ return
+
def get_unihash(self, tid):
return self.taskhash[tid]
@@ -188,6 +191,14 @@ class SignatureGeneratorBasic(SignatureGenerator):
for task in taskdeps:
d.setVar("BB_BASEHASH_task-%s" % task, self.basehash[fn + ":" + task])
+ def postparsing_clean_cache(self):
+ #
+ # After parsing we can remove some things from memory to reduce our memory footprint
+ #
+ self.gendeps = {}
+ self.lookupcache = {}
+ self.taskdeps = {}
+
def rundep_check(self, fn, recipename, task, dep, depname, dataCache):
# Return True if we should keep the dependency, False to drop it
# We only manipulate the dependencies for packages not in the whitelist