summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-11-23 13:51:06 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-11-25 21:26:15 +0000
commitf5efafffbce690ed924c5fd894d56774490b4520 (patch)
tree88ba87cedd7ea16f41df9c5c3cc1db072bb50bcb /bitbake
parentf86baae14dc9205474dbd1ef50b81bae18818970 (diff)
downloadpoky-f5efafffbce690ed924c5fd894d56774490b4520.tar.gz
bitbake: runqueue: Ensure failed harddependencies in scenequeue are accounted for in migrations
Setscene hard dependencies were not being correctly handled during task migration. For example, do_package of recipe X might become valid due to hashequiv yet we're still rebuilding pseudo-native, a harddep of do_package. This would mean it would try to execute that setscene task despite pseudo not being present. Fix this by ignoring tasks with failed harddependencies. This does mean stlightly more rebuilds than is optimal but it avoids build crashes. Ultimately the new runqueue model can likely better handle these cases than the older codebase could but that is for another more invasive patch. (Bitbake rev: 9a1072060350dc2e0eee14a5cc5af20c900f8a6d) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/runqueue.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 26492e7087..485d9341f5 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -2343,7 +2343,12 @@ class RunQueueExecute:
2343 self.sq_buildable.remove(tid) 2343 self.sq_buildable.remove(tid)
2344 if tid in self.sq_running: 2344 if tid in self.sq_running:
2345 self.sq_running.remove(tid) 2345 self.sq_running.remove(tid)
2346 if self.sqdata.sq_revdeps[tid].issubset(self.scenequeue_covered | self.scenequeue_notcovered): 2346 harddepfail = False
2347 for t in self.sqdata.sq_harddeps:
2348 if tid in self.sqdata.sq_harddeps[t] and t in self.scenequeue_notcovered:
2349 harddepfail = True
2350 break
2351 if not harddepfail and self.sqdata.sq_revdeps[tid].issubset(self.scenequeue_covered | self.scenequeue_notcovered):
2347 if tid not in self.sq_buildable: 2352 if tid not in self.sq_buildable:
2348 self.sq_buildable.add(tid) 2353 self.sq_buildable.add(tid)
2349 if len(self.sqdata.sq_revdeps[tid]) == 0: 2354 if len(self.sqdata.sq_revdeps[tid]) == 0:
@@ -2374,6 +2379,8 @@ class RunQueueExecute:
2374 update_scenequeue_data([tid], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False) 2379 update_scenequeue_data([tid], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False)
2375 if tid in self.sqdata.valid and not origvalid: 2380 if tid in self.sqdata.valid and not origvalid:
2376 logger.info("Setscene task %s became valid" % tid) 2381 logger.info("Setscene task %s became valid" % tid)
2382 if harddepfail:
2383 self.sq_task_failoutright(tid)
2377 2384
2378 if changed: 2385 if changed:
2379 self.holdoff_need_update = True 2386 self.holdoff_need_update = True