bitbake: cooker: Handle parsing results queue race

The previous fix introduced a race where the queue might not be empty
but all the parser processes have exited. Handle this correctly to avoid
occasional errors.

(Bitbake rev: 4a06b2fa37648204cab41a5cbfb6fa217aa32686)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 8e7f2b6500e26610f52d128b48ca0a09bf6fb2cb)
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2021-11-22 10:24:48 +08:00
parent ad2459fc1d
commit e1b119ca21

View File

@@ -2214,24 +2214,28 @@ class CookerParser(object):
yield not cached, mc, infos
def parse_generator(self):
while self.processes:
empty = False
while self.processes or not empty:
for process in self.processes.copy():
if not process.is_alive():
process.join()
self.processes.remove(process)
if self.parsed >= self.toparse:
break
try:
result = self.result_queue.get(timeout=0.25)
except queue.Empty:
empty = True
pass
else:
empty = False
value = result[1]
if isinstance(value, BaseException):
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)