diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-03-24 11:00:04 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-04-06 09:31:24 +0100 |
commit | 9982b2c0f2a4bf6d451b532856ca6cf126985f22 (patch) | |
tree | 811590ad5eb2ab18891e2144032e879b7b775920 /bitbake/lib/bb/runqueue.py | |
parent | 232cb7b0553f844be695d26f55aaf531029a6a9a (diff) | |
download | poky-9982b2c0f2a4bf6d451b532856ca6cf126985f22.tar.gz |
bitbake: runqueue: Further fixes for confused setscene tasks
There is further evidence of tasks ending up being "covered" and "notcovered"
which shouldn't happen and is bad. The code that caused this problem last
time appears to have issues where stamps for tasks already exist.
Split out the setscene stamp checking code to a separate function and
use this when checking "hard dependencies" (like pseudo-native) so
that if the stamps exist and it will be "covered", it is not put on
the notcovered list.
(Bitbake rev: a1848a481e36b729c8e4130c394b1d462d4b488a)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 80d7f6ca6b..cd56a55472 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -2457,6 +2457,9 @@ class RunQueueExecute: | |||
2457 | if dep in self.scenequeue_covered or dep in self.scenequeue_notcovered: | 2457 | if dep in self.scenequeue_covered or dep in self.scenequeue_notcovered: |
2458 | # dependency could be already processed, e.g. noexec setscene task | 2458 | # dependency could be already processed, e.g. noexec setscene task |
2459 | continue | 2459 | continue |
2460 | noexec, stamppresent = check_setscene_stamps(dep, self.rqdata, self.rq, self.stampcache) | ||
2461 | if noexec or stamppresent: | ||
2462 | continue | ||
2460 | logger.debug2("%s was unavailable and is a hard dependency of %s so skipping" % (task, dep)) | 2463 | logger.debug2("%s was unavailable and is a hard dependency of %s so skipping" % (task, dep)) |
2461 | self.sq_task_failoutright(dep) | 2464 | self.sq_task_failoutright(dep) |
2462 | continue | 2465 | continue |
@@ -2795,6 +2798,26 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq): | |||
2795 | event = bb.event.StaleSetSceneTasks(found[mc]) | 2798 | event = bb.event.StaleSetSceneTasks(found[mc]) |
2796 | bb.event.fire(event, cooker.databuilder.mcdata[mc]) | 2799 | bb.event.fire(event, cooker.databuilder.mcdata[mc]) |
2797 | 2800 | ||
2801 | def check_setscene_stamps(tid, rqdata, rq, stampcache, noexecstamp=False): | ||
2802 | |||
2803 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | ||
2804 | |||
2805 | taskdep = rqdata.dataCaches[mc].task_deps[taskfn] | ||
2806 | |||
2807 | if 'noexec' in taskdep and taskname in taskdep['noexec']: | ||
2808 | bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn) | ||
2809 | return True, False | ||
2810 | |||
2811 | if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): | ||
2812 | logger.debug2('Setscene stamp current for task %s', tid) | ||
2813 | return False, True | ||
2814 | |||
2815 | if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache): | ||
2816 | logger.debug2('Normal stamp current for task %s', tid) | ||
2817 | return False, True | ||
2818 | |||
2819 | return False, False | ||
2820 | |||
2798 | def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq, summary=True): | 2821 | def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq, summary=True): |
2799 | 2822 | ||
2800 | tocheck = set() | 2823 | tocheck = set() |
@@ -2805,24 +2828,14 @@ def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq, s | |||
2805 | if tid in sqdata.valid: | 2828 | if tid in sqdata.valid: |
2806 | sqdata.valid.remove(tid) | 2829 | sqdata.valid.remove(tid) |
2807 | 2830 | ||
2808 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | 2831 | noexec, stamppresent = check_setscene_stamps(tid, rqdata, rq, stampcache, noexecstamp=True) |
2809 | |||
2810 | taskdep = rqdata.dataCaches[mc].task_deps[taskfn] | ||
2811 | 2832 | ||
2812 | if 'noexec' in taskdep and taskname in taskdep['noexec']: | 2833 | if noexec: |
2813 | sqdata.noexec.add(tid) | 2834 | sqdata.noexec.add(tid) |
2814 | sqrq.sq_task_skip(tid) | 2835 | sqrq.sq_task_skip(tid) |
2815 | bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn) | ||
2816 | continue | ||
2817 | |||
2818 | if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): | ||
2819 | logger.debug2('Setscene stamp current for task %s', tid) | ||
2820 | sqdata.stamppresent.add(tid) | ||
2821 | sqrq.sq_task_skip(tid) | ||
2822 | continue | 2836 | continue |
2823 | 2837 | ||
2824 | if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache): | 2838 | if stamppresent: |
2825 | logger.debug2('Normal stamp current for task %s', tid) | ||
2826 | sqdata.stamppresent.add(tid) | 2839 | sqdata.stamppresent.add(tid) |
2827 | sqrq.sq_task_skip(tid) | 2840 | sqrq.sq_task_skip(tid) |
2828 | continue | 2841 | continue |