diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-08-31 11:37:53 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-09-02 18:09:49 +0100 |
commit | 412a26e154fb70473f2d96283f383aebce8f8e5e (patch) | |
tree | 2fcfca7934b84b196b3962c1b21581fdb36bd95a | |
parent | e7b2b7d40da1b9b9c67e6f5b0f4183800c664ddd (diff) | |
download | poky-412a26e154fb70473f2d96283f383aebce8f8e5e.tar.gz |
bitbake: build/runqueue: Add noextra stamp file parameter to fix multiconfig builds
We can't execute the same task for the same package_arch multiple
times as the current setup has conflicting directories. Since
these would usually have the same stamp/hash, we want to execute in
sequence rather than in parallel, so for the purposes of task execution,
don't consider the "extra-info" on the stamp files. We need to add
a parameter to the stamp function to achieve this.
This avoids multiple update-rc.d populate_sysroot tasks executing in
parallel and breaking multiconfig builds.
(Bitbake rev: a9041fc96a14e718c0c1d1676e705343b9e872d3)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/build.py | 8 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 4 |
2 files changed, 7 insertions, 5 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index c632a271fe..310b5c0511 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py | |||
@@ -633,7 +633,7 @@ def exec_task(fn, task, d, profile = False): | |||
633 | event.fire(failedevent, d) | 633 | event.fire(failedevent, d) |
634 | return 1 | 634 | return 1 |
635 | 635 | ||
636 | def stamp_internal(taskname, d, file_name, baseonly=False): | 636 | def stamp_internal(taskname, d, file_name, baseonly=False, noextra=False): |
637 | """ | 637 | """ |
638 | Internal stamp helper function | 638 | Internal stamp helper function |
639 | Makes sure the stamp directory exists | 639 | Makes sure the stamp directory exists |
@@ -656,6 +656,8 @@ def stamp_internal(taskname, d, file_name, baseonly=False): | |||
656 | 656 | ||
657 | if baseonly: | 657 | if baseonly: |
658 | return stamp | 658 | return stamp |
659 | if noextra: | ||
660 | extrainfo = "" | ||
659 | 661 | ||
660 | if not stamp: | 662 | if not stamp: |
661 | return | 663 | return |
@@ -751,12 +753,12 @@ def write_taint(task, d, file_name = None): | |||
751 | with open(taintfn, 'w') as taintf: | 753 | with open(taintfn, 'w') as taintf: |
752 | taintf.write(str(uuid.uuid4())) | 754 | taintf.write(str(uuid.uuid4())) |
753 | 755 | ||
754 | def stampfile(taskname, d, file_name = None): | 756 | def stampfile(taskname, d, file_name = None, noextra=False): |
755 | """ | 757 | """ |
756 | Return the stamp for a given task | 758 | Return the stamp for a given task |
757 | (d can be a data dict or dataCache) | 759 | (d can be a data dict or dataCache) |
758 | """ | 760 | """ |
759 | return stamp_internal(taskname, d, file_name) | 761 | return stamp_internal(taskname, d, file_name, noextra=noextra) |
760 | 762 | ||
761 | def add_tasks(tasklist, d): | 763 | def add_tasks(tasklist, d): |
762 | task_deps = d.getVar('_task_deps', False) | 764 | task_deps = d.getVar('_task_deps', False) |
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index ce30fccd43..e4c97379af 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -137,7 +137,7 @@ class RunQueueScheduler(object): | |||
137 | for tid in self.rqdata.runtaskentries: | 137 | for tid in self.rqdata.runtaskentries: |
138 | (mc, fn, taskname) = split_tid(tid) | 138 | (mc, fn, taskname) = split_tid(tid) |
139 | taskfn = taskfn_fromtid(tid) | 139 | taskfn = taskfn_fromtid(tid) |
140 | self.stamps[tid] = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn) | 140 | self.stamps[tid] = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn, noextra=True) |
141 | if tid in self.rq.runq_buildable: | 141 | if tid in self.rq.runq_buildable: |
142 | self.buildable.append(tid) | 142 | self.buildable.append(tid) |
143 | 143 | ||
@@ -1805,7 +1805,7 @@ class RunQueueExecuteTasks(RunQueueExecute): | |||
1805 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps((taskfn, task, taskname, False, self.cooker.collection.get_file_appends(taskfn), taskdepdata)) + b"</runtask>") | 1805 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps((taskfn, task, taskname, False, self.cooker.collection.get_file_appends(taskfn), taskdepdata)) + b"</runtask>") |
1806 | self.rq.worker[mc].process.stdin.flush() | 1806 | self.rq.worker[mc].process.stdin.flush() |
1807 | 1807 | ||
1808 | self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn) | 1808 | self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn, noextra=True) |
1809 | self.build_stamps2.append(self.build_stamps[task]) | 1809 | self.build_stamps2.append(self.build_stamps[task]) |
1810 | self.runq_running.add(task) | 1810 | self.runq_running.add(task) |
1811 | self.stats.taskActive() | 1811 | self.stats.taskActive() |