diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-06-07 18:12:30 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-06-14 12:52:57 +0100 |
commit | 0ee02ca2fa24b0a910a61e4b2ecb55e765735127 (patch) | |
tree | 30055e90c194bba79409f76201c7a2e90d109428 /bitbake/lib | |
parent | 026c94be2ea2889a5efc1259cd4f8a33a4a677ef (diff) | |
download | ast2050-yocto-poky-0ee02ca2fa24b0a910a61e4b2ecb55e765735127.zip ast2050-yocto-poky-0ee02ca2fa24b0a910a61e4b2ecb55e765735127.tar.gz |
bitbake: runqueue: Abstract the start and teardown worker functions
We're going to need a fakeroot/pseudo version of the worker so
abstract the code to start the worker process.
(Bitbake rev: b5d0f12f9df3ab211700473ed145ee6fbd9ca8e9)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 34a123b..3e694ba 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -800,15 +800,13 @@ class RunQueue: self.rqexe = None self.worker = None + self.workerpipe = None - def start_worker(self): - if self.worker: - self.teardown_worker() - + def _start_worker(self): logger.debug(1, "Starting bitbake-worker") - self.worker = subprocess.Popen(["bitbake-worker", "decafbad"], stdout=subprocess.PIPE, stdin=subprocess.PIPE) - bb.utils.nonblockingfd(self.worker.stdout) - self.workerpipe = runQueuePipe(self.worker.stdout, None, self.cfgData, self) + worker = subprocess.Popen(["bitbake-worker", "decafbad"], stdout=subprocess.PIPE, stdin=subprocess.PIPE) + bb.utils.nonblockingfd(worker.stdout) + workerpipe = runQueuePipe(worker.stdout, None, self.cfgData, None) workerdata = { "taskdeps" : self.rqdata.dataCache.task_deps, @@ -825,19 +823,35 @@ class RunQueue: "logdefaultdomain" : bb.msg.loggerDefaultDomains, } - self.worker.stdin.write("<cookerconfig>" + pickle.dumps(self.cooker.configuration) + "</cookerconfig>") - self.worker.stdin.write("<workerdata>" + pickle.dumps(workerdata) + "</workerdata>") - self.worker.stdin.flush() + worker.stdin.write("<cookerconfig>" + pickle.dumps(self.cooker.configuration) + "</cookerconfig>") + worker.stdin.write("<workerdata>" + pickle.dumps(workerdata) + "</workerdata>") + worker.stdin.flush() - def teardown_worker(self): + return worker, workerpipe + + def _teardown_worker(self, worker, workerpipe): + if not worker: + return logger.debug(1, "Teardown for bitbake-worker") - self.worker.stdin.write("<quit></quit>") - self.worker.stdin.flush() - while self.worker.returncode is None: - self.workerpipe.read() - self.worker.poll() - while self.workerpipe.read(): + worker.stdin.write("<quit></quit>") + worker.stdin.flush() + while worker.returncode is None: + workerpipe.read() + worker.poll() + while workerpipe.read(): continue + workerpipe.close() + + def start_worker(self): + if self.worker: + self.teardown_worker() + + self.worker, self.workerpipe = self._start_worker() + + def teardown_worker(self): + self._teardown_worker(self.worker, self.workerpipe) + self.worker = None + self.workerpipe = None def check_stamp_task(self, task, taskname = None, recurse = False, cache = None): def get_timestamp(f): |