diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-06-08 17:23:42 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-06-08 20:38:27 +0100 |
commit | 355338c40c6fc65d10980cfd75e9ab5ff96ed43a (patch) | |
tree | 1f9564de6685fd2237e14809e353249017531416 /bitbake/lib | |
parent | 9f33dde6e71b7b66db357b1bf289ae63e0db77d2 (diff) | |
download | ast2050-yocto-poky-355338c40c6fc65d10980cfd75e9ab5ff96ed43a.zip ast2050-yocto-poky-355338c40c6fc65d10980cfd75e9ab5ff96ed43a.tar.gz |
bitbake/cooker.py: Misc sync with upstream
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/build.py | 1 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 29 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 8 |
3 files changed, 20 insertions, 18 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index f1384ef..0f04736 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py @@ -28,6 +28,7 @@ import os import sys import logging +import shlex import bb import bb.msg import bb.process diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index b66d003..dc196ae 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -28,7 +28,6 @@ import atexit import itertools import logging import multiprocessing -import signal import sre_constants import threading from cStringIO import StringIO @@ -148,6 +147,8 @@ class BBCooker: self.command = bb.command.Command(self) self.state = state.initial + self.parser = None + def parseConfiguration(self): @@ -799,9 +800,6 @@ class BBCooker: buildname = bb.data.getVar("BUILDNAME", self.configuration.data) bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.configuration.event_data) - # Clear locks - bb.fetch.persistent_database_connection = {} - # Execute the runqueue runlist = [[item, "do_%s" % task]] @@ -821,6 +819,10 @@ class BBCooker: buildlog.error("'%s' failed" % taskdata.fn_index[fnid]) failures += len(exc.args) retval = False + except SystemExit as exc: + self.command.finishAsyncCommand() + return False + if not retval: bb.event.fire(bb.event.BuildCompleted(buildname, item, failures), self.configuration.event_data) self.command.finishAsyncCommand() @@ -858,6 +860,10 @@ class BBCooker: buildlog.error("'%s' failed" % taskdata.fn_index[fnid]) failures += len(exc.args) retval = False + except SystemExit as exc: + self.command.finishAsyncCommand() + return False + if not retval: bb.event.fire(bb.event.BuildCompleted(buildname, targets, failures), self.configuration.event_data) self.command.finishAsyncCommand() @@ -883,9 +889,6 @@ class BBCooker: runlist.append([k, "do_%s" % task]) taskdata.add_unresolved(localdata, self.status) - # Clear locks - bb.fetch.persistent_database_connection = {} - rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist) self.server_registration_cb(buildTargetsIdle, rq) @@ -894,6 +897,10 @@ class BBCooker: if self.state == state.running: return + if self.state in (state.shutdown, state.stop): + self.parser.shutdown(clean=False) + sys.exit(1) + if self.state != state.parsing: self.parseConfiguration () @@ -1194,9 +1201,8 @@ class CookerParser(object): def start(self): def init(cfg): - signal.signal(signal.SIGINT, signal.SIG_IGN) - multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, args=(self.cooker.configuration.data, ), exitpriority=1) parse_file.cfg = cfg + multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, args=(self.cooker.configuration.data, ), exitpriority=1) self.results = self.load_cached() @@ -1225,7 +1231,7 @@ class CookerParser(object): sync = threading.Thread(target=self.bb_cache.sync) sync.start() - atexit.register(lambda: sync.join()) + multiprocessing.util.Finalize(None, sync.join, exitpriority=-100) bb.codeparser.parser_cache_savemerge(self.cooker.configuration.data) def load_cached(self): @@ -1239,9 +1245,6 @@ class CookerParser(object): except StopIteration: self.shutdown() return False - except KeyboardInterrupt: - self.shutdown(clean=False) - raise except ParsingFailure as exc: self.shutdown(clean=False) bb.fatal('Unable to parse %s: %s' % diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index afa1f8d..52360ac 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -753,7 +753,6 @@ class RunQueueData: self.rqdata.runq_depends[task], self.rqdata.runq_revdeps[task]) - class RunQueue: def __init__(self, cooker, cfgData, dataCache, taskData, targets): @@ -1106,8 +1105,10 @@ class RunQueueExecute: newsi = os.open(os.devnull, os.O_RDWR) os.dup2(newsi, sys.stdin.fileno()) - bb.data.setVar("BB_WORKERCONTEXT", "1", self.cooker.configuration.data) + bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data) + bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data) + bb.parse.siggen.set_taskdata(self.rqdata.hashes, self.rqdata.hash_deps) the_data = bb.cache.Cache.loadDataFull(fn, self.cooker.get_file_appends(fn), self.cooker.configuration.data) @@ -1124,9 +1125,6 @@ class RunQueueExecute: if quieterrors: the_data.setVarFlag(taskname, "quieterrors", "1") - bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data) - bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data) - bb.parse.siggen.set_taskdata(self.rqdata.hashes, self.rqdata.hash_deps) for h in self.rqdata.hashes: bb.data.setVar("BBHASH_%s" % h, self.rqdata.hashes[h], the_data) |