bitbake/cooker: Fix parsing failure zombie problem

When parsing if a SystemExit event is triggered, it causes the parsing thread to
exit and the main process hangs waiting for it to finish indefintely. Add code to
catch BaseExceptions and raise these with the main process gracefully instead
of just hanging indefinitely with zombie processes.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2011-02-23 11:09:07 +00:00
parent c0f0a8ee0c
commit 56a92105fe
1 changed files with 12 additions and 0 deletions

View File

@ -948,6 +948,13 @@ class CookerExit(bb.event.Event):
def __init__(self):
bb.event.Event.__init__(self)
class ParsingFailure(Exception):
def __init__(self, realexception, recipe):
self.realexception = realexception
self.recipe = recipe
Exception.__init__(self, "Failure when parsing %s" % recipe)
self.args = (realexception, recipe)
def parse_file(task):
filename, appends = task
try:
@ -955,6 +962,11 @@ def parse_file(task):
except Exception, exc:
exc.recipe = filename
raise exc
# Need to turn BaseExceptions into Exceptions here so we gracefully shutdown
# and for example a worker thread doesn't just exit on its own in response to
# a SystemExit event for example.
except BaseException, exc:
raise ParsingFailure(exc, filename)
class CookerParser(object):
def __init__(self, cooker, filelist, masked):