mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-01 13:58:04 +00:00
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 <richard.purdie@linuxfoundation.org> (cherry picked from commit dc86a533d951d13643ce446533370da804782afc) Signed-off-by: Anuj Mittal <anuj.mittal@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
03df183169
commit
f39f01dee7
|
|
@ -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 = []
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user