bitbake: cooker: Improve exception handling in parsing process

If an exception occurs in the parsing process, ensure the cleanup
is called via all codepaths using a try/finally.

(Bitbake rev: e1ba2a69f1fc02f01a851bce20b1badf0b991f03)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2022-03-26 18:27:28 +00:00
parent af5c7cf95f
commit 849e26181d

View File

@@ -2041,32 +2041,32 @@ class Parser(multiprocessing.Process):
self.init()
pending = []
while True:
try:
self.quit.get_nowait()
except queue.Empty:
pass
else:
self.results.close()
self.results.join_thread()
break
if pending:
result = pending.pop()
else:
try:
while True:
try:
job = self.jobs.pop()
except IndexError:
self.results.close()
self.results.join_thread()
self.quit.get_nowait()
except queue.Empty:
pass
else:
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:
pending.append(result)
if pending:
result = pending.pop()
else:
try:
job = self.jobs.pop()
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:
pending.append(result)
finally:
self.results.close()
self.results.join_thread()
def parse(self, mc, cache, filename, appends):
try: