summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-03-08 15:44:58 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-03-24 14:36:21 +0000
commit55554ddc9018a899fbaba6af730cb4a6a29f781c (patch)
tree10f66abf9289ed550561cc2dec9218b285813a46 /bitbake
parentc444ec2c23ed1e7c3e1f9278e7be4fa90454c3dd (diff)
downloadpoky-55554ddc9018a899fbaba6af730cb4a6a29f781c.tar.gz
bitbake: runqueue: Fix task execution corruption issue
We've seen occasional issues where linux-yocto:do_compile_kernelmodules would run without do_shared_workdir running before it. do_shared_workdir is an setscene task but never has an sstate object generated so it will always rerun. This should not happen since compile_kernemodules should only execute if a setscene that depends on it didn't run and that should trigger do_shared_workdir not to be marked as covered. The issue is that build-appliance-image:do_package is one of the tasks which covers linux-yocto:do_compile_kernelmodules but it is also a noexec task and has a dependecy on pseudo-native:do_populate_sysroot. In the problem case, pseudo-native:do_populate_sysroot is unavailable but marked as covered since it is noexec. The "harddeps" code then also marks it as notcovered. No task should ever be both covered and notcovered and this is where the problems come from. The solution is for the harddeps code only to to fail tasks if they've not already been handled in some way. The code is assuming code couldn't have handled revdeps at this point but we now have clear evidence they can. (Bitbake rev: 8a13955d8da86b976bb136ba1e724a02f7953bca) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit f66556bbb38449789ceea2fd105e9f68df7fb660) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/runqueue.py3
1 files changed, 3 insertions, 0 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 30cab5379e..6186a83f80 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -2421,6 +2421,9 @@ class RunQueueExecute:
2421 2421
2422 for dep in sorted(self.sqdata.sq_deps[task]): 2422 for dep in sorted(self.sqdata.sq_deps[task]):
2423 if fail and task in self.sqdata.sq_harddeps and dep in self.sqdata.sq_harddeps[task]: 2423 if fail and task in self.sqdata.sq_harddeps and dep in self.sqdata.sq_harddeps[task]:
2424 if dep in self.scenequeue_covered or dep in self.scenequeue_notcovered:
2425 # dependency could be already processed, e.g. noexec setscene task
2426 continue
2424 logger.debug(2, "%s was unavailable and is a hard dependency of %s so skipping" % (task, dep)) 2427 logger.debug(2, "%s was unavailable and is a hard dependency of %s so skipping" % (task, dep))
2425 self.sq_task_failoutright(dep) 2428 self.sq_task_failoutright(dep)
2426 continue 2429 continue