summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2016-12-21 14:11:24 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-12-22 12:36:40 +0000
commit4fc02c5eaaf7ef70606d06f8c7664ce7e40d166b (patch)
tree7cad3e394637fc6474325ecfb8dbec78dddc86f8 /bitbake
parentfe11d18ffd2105ea899332415089b4bb122cc4d9 (diff)
downloadpoky-4fc02c5eaaf7ef70606d06f8c7664ce7e40d166b.tar.gz
bitbake: runqueue: Only start fakeroot workers when needed
Fakeroot workers usually have dependencies that need to be ready before they can be started. Starting them as a block therefore doesn't work as the dependencies may or may not have been built. Therefore start the multiconfig fakeworkers individually upon demand. [YOCTO #10344] (Bitbake rev: ab15486c636e451ed5a62e561980946887901c3b) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/runqueue.py15
1 files changed, 7 insertions, 8 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index ef14347e15..48c6a79ffb 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -1068,10 +1068,9 @@ class RunQueue:
1068 for mc in self.rqdata.dataCaches: 1068 for mc in self.rqdata.dataCaches:
1069 self.worker[mc] = self._start_worker(mc) 1069 self.worker[mc] = self._start_worker(mc)
1070 1070
1071 def start_fakeworker(self, rqexec): 1071 def start_fakeworker(self, rqexec, mc):
1072 if not self.fakeworker: 1072 if not mc in self.fakeworker:
1073 for mc in self.rqdata.dataCaches: 1073 self.fakeworker[mc] = self._start_worker(mc, True, rqexec)
1074 self.fakeworker[mc] = self._start_worker(mc, True, rqexec)
1075 1074
1076 def teardown_workers(self): 1075 def teardown_workers(self):
1077 self.teardown = True 1076 self.teardown = True
@@ -1804,9 +1803,9 @@ class RunQueueExecuteTasks(RunQueueExecute):
1804 1803
1805 taskdep = self.rqdata.dataCaches[mc].task_deps[taskfn] 1804 taskdep = self.rqdata.dataCaches[mc].task_deps[taskfn]
1806 if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not (self.cooker.configuration.dry_run or self.rqdata.setscene_enforce): 1805 if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not (self.cooker.configuration.dry_run or self.rqdata.setscene_enforce):
1807 if not self.rq.fakeworker: 1806 if not mc in self.rq.fakeworker:
1808 try: 1807 try:
1809 self.rq.start_fakeworker(self) 1808 self.rq.start_fakeworker(self, mc)
1810 except OSError as exc: 1809 except OSError as exc:
1811 logger.critical("Failed to spawn fakeroot worker to run %s: %s" % (task, str(exc))) 1810 logger.critical("Failed to spawn fakeroot worker to run %s: %s" % (task, str(exc)))
1812 self.rq.state = runQueueFailed 1811 self.rq.state = runQueueFailed
@@ -2221,8 +2220,8 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
2221 2220
2222 taskdep = self.rqdata.dataCaches[mc].task_deps[taskfn] 2221 taskdep = self.rqdata.dataCaches[mc].task_deps[taskfn]
2223 if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run: 2222 if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run:
2224 if not self.rq.fakeworker: 2223 if not mc in self.rq.fakeworker:
2225 self.rq.start_fakeworker(self) 2224 self.rq.start_fakeworker(self, mc)
2226 self.rq.fakeworker[mc].process.stdin.write(b"<runtask>" + pickle.dumps((taskfn, task, taskname, True, self.cooker.collection.get_file_appends(taskfn), taskdepdata, False)) + b"</runtask>") 2225 self.rq.fakeworker[mc].process.stdin.write(b"<runtask>" + pickle.dumps((taskfn, task, taskname, True, self.cooker.collection.get_file_appends(taskfn), taskdepdata, False)) + b"</runtask>")
2227 self.rq.fakeworker[mc].process.stdin.flush() 2226 self.rq.fakeworker[mc].process.stdin.flush()
2228 else: 2227 else: