From f39f01dee7593280803497659df99b02556987ff Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 22 Nov 2021 10:24:46 +0800 Subject: bitbake: cooker: Handle parse threads disappearing to avoid hangs If one of the parse threads disappears during parsing for some reason, bitbake currently hangs. Avoid this (and zombie threads hanging around) by joining() threads which have exited. (Bitbake rev: 6e746ccf8977a78f1565c6b2fe65aaede260e1bb) Signed-off-by: Richard Purdie (cherry picked from commit dc86a533d951d13643ce446533370da804782afc) Signed-off-by: Anuj Mittal Signed-off-by: Richard Purdie --- bitbake/lib/bb/cooker.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index b041d2a06b..f12f4caa05 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -2036,6 +2036,7 @@ class Parser(multiprocessing.Process): result = pending.pop() else: try: + time.sleep(0.25) job = self.jobs.pop() except IndexError: self.results.close() @@ -2214,7 +2215,7 @@ class CookerParser(object): yield not cached, mc, infos def parse_generator(self): - while True: + while self.processes: if self.parsed >= self.toparse: break @@ -2228,6 +2229,14 @@ class CookerParser(object): raise value else: yield result + for process in self.processes.copy(): + if not process.is_alive(): + process.join() + self.processes.remove(process) + + if not (self.parsed >= self.toparse): + raise bb.parse.ParseError("Not all recipes parsed, parser thread killed/died? Exiting.", None) + def parse_next(self): result = [] -- cgit v1.2.3-54-g00ecf