diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-08-05 11:21:18 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-08-08 15:44:47 +0100 |
commit | 377a671e07ff8dbd23b68a0693a035e8ad51fdc6 (patch) | |
tree | 518a150232d6c435536e3235fd540630da7e6a4b /bitbake/lib/bb | |
parent | 35183c1b33255e44801aa6a582a148c7831a4797 (diff) | |
download | poky-377a671e07ff8dbd23b68a0693a035e8ad51fdc6.tar.gz |
bitbake: runqueue: Ensure deferred tasks are sorted by multiconfig
We have to prefer one multiconfig over another when deferring tasks, else
we'll have cross-linked build trees and nothing will be able to build.
In the original population code, we sort like this but we don't after
rehashing. Ensure we have the same sorting after rehashing toa void
deadlocks.
(Bitbake rev: 27228c7f026acb8ae9e1211d0486ffb7338123a2)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 359b503297..873f384ec4 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -2506,11 +2506,14 @@ class RunQueueExecute: | |||
2506 | 2506 | ||
2507 | if update_tasks: | 2507 | if update_tasks: |
2508 | self.sqdone = False | 2508 | self.sqdone = False |
2509 | for tid in [t[0] for t in update_tasks]: | 2509 | for mc in sorted(self.sqdata.multiconfigs): |
2510 | h = pending_hash_index(tid, self.rqdata) | 2510 | for tid in sorted([t[0] for t in update_tasks]): |
2511 | if h in self.sqdata.hashes and tid != self.sqdata.hashes[h]: | 2511 | if mc_from_tid(tid) != mc: |
2512 | self.sq_deferred[tid] = self.sqdata.hashes[h] | 2512 | continue |
2513 | bb.note("Deferring %s after %s" % (tid, self.sqdata.hashes[h])) | 2513 | h = pending_hash_index(tid, self.rqdata) |
2514 | if h in self.sqdata.hashes and tid != self.sqdata.hashes[h]: | ||
2515 | self.sq_deferred[tid] = self.sqdata.hashes[h] | ||
2516 | bb.note("Deferring %s after %s" % (tid, self.sqdata.hashes[h])) | ||
2514 | update_scenequeue_data([t[0] for t in update_tasks], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False) | 2517 | update_scenequeue_data([t[0] for t in update_tasks], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False) |
2515 | 2518 | ||
2516 | for (tid, harddepfail, origvalid) in update_tasks: | 2519 | for (tid, harddepfail, origvalid) in update_tasks: |