diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-12-27 20:47:33 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-01-02 16:43:01 +0000 |
commit | 7ab33df995f370a2597720245d28616cad203198 (patch) | |
tree | c2213467c63463ba440c9bb7ae3132f9c7e6b9a5 /bitbake/lib | |
parent | e8ebeeaa1beb02d308bc8430f9b034229e16b062 (diff) | |
download | poky-7ab33df995f370a2597720245d28616cad203198.tar.gz |
bitbake: runqueue: Ensure task dependencies are run correctly
We've seen a number of mystery failures where task B would run despite
task A, its dependency not having run. An example would be do_compile
when do_unpack didn't run.
This has been tracked down to this code block. In theory it shouldn't
trigger however it can and has due to bugs elsewhere. When it does, it
causes significant weird failures and possible build corruption.
Change the code to abort the build. This avoids any chance of corruption
and should ensure the issues get reported, putting an end to the weird
build failures.
There may be some cases where this triggers and it shouldn't, we'll work
through those as they arise and are identified.
(Bitbake rev: 7a92b7f58ab187eddfe550bd6fb687240c7b11bb)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index f82799800b..56ca2529ca 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -2353,6 +2353,12 @@ class RunQueueExecute: | |||
2353 | if tid in self.tasks_scenequeue_done: | 2353 | if tid in self.tasks_scenequeue_done: |
2354 | self.tasks_scenequeue_done.remove(tid) | 2354 | self.tasks_scenequeue_done.remove(tid) |
2355 | for dep in self.sqdata.sq_covered_tasks[tid]: | 2355 | for dep in self.sqdata.sq_covered_tasks[tid]: |
2356 | if dep in self.runq_complete: | ||
2357 | bb.error("Task %s marked as completed but now needing to rerun? Aborting build." % dep) | ||
2358 | self.failed_tids.append(tid) | ||
2359 | self.rq.state = runQueueCleanUp | ||
2360 | return | ||
2361 | |||
2356 | if dep not in self.runq_complete: | 2362 | if dep not in self.runq_complete: |
2357 | if dep in self.tasks_scenequeue_done and dep not in self.sqdata.unskippable: | 2363 | if dep in self.tasks_scenequeue_done and dep not in self.sqdata.unskippable: |
2358 | self.tasks_scenequeue_done.remove(dep) | 2364 | self.tasks_scenequeue_done.remove(dep) |