diff options
| -rw-r--r-- | bitbake/lib/bb/runqueue.py | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 9f3abff85f..b34e2d5607 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
| @@ -14,6 +14,7 @@ import os | |||
| 14 | import sys | 14 | import sys |
| 15 | import stat | 15 | import stat |
| 16 | import errno | 16 | import errno |
| 17 | import itertools | ||
| 17 | import logging | 18 | import logging |
| 18 | import re | 19 | import re |
| 19 | import bb | 20 | import bb |
| @@ -2189,11 +2190,16 @@ class RunQueueExecute: | |||
| 2189 | if not hasattr(self, "sorted_setscene_tids"): | 2190 | if not hasattr(self, "sorted_setscene_tids"): |
| 2190 | # Don't want to sort this set every execution | 2191 | # Don't want to sort this set every execution |
| 2191 | self.sorted_setscene_tids = sorted(self.rqdata.runq_setscene_tids) | 2192 | self.sorted_setscene_tids = sorted(self.rqdata.runq_setscene_tids) |
| 2193 | # Resume looping where we left off when we returned to feed the mainloop | ||
| 2194 | self.setscene_tids_generator = itertools.cycle(self.rqdata.runq_setscene_tids) | ||
| 2192 | 2195 | ||
| 2193 | task = None | 2196 | task = None |
| 2194 | if not self.sqdone and self.can_start_task(): | 2197 | if not self.sqdone and self.can_start_task(): |
| 2195 | # Find the next setscene to run | 2198 | loopcount = 0 |
| 2196 | for nexttask in self.sorted_setscene_tids: | 2199 | # Find the next setscene to run, exit the loop when we've processed all tids or found something to execute |
| 2200 | while loopcount < len(self.rqdata.runq_setscene_tids): | ||
| 2201 | loopcount += 1 | ||
| 2202 | nexttask = next(self.setscene_tids_generator) | ||
| 2197 | if nexttask in self.sq_buildable and nexttask not in self.sq_running and self.sqdata.stamps[nexttask] not in self.build_stamps.values() and nexttask not in self.sq_harddep_deferred: | 2203 | if nexttask in self.sq_buildable and nexttask not in self.sq_running and self.sqdata.stamps[nexttask] not in self.build_stamps.values() and nexttask not in self.sq_harddep_deferred: |
| 2198 | if nexttask in self.sq_deferred and self.sq_deferred[nexttask] not in self.runq_complete: | 2204 | if nexttask in self.sq_deferred and self.sq_deferred[nexttask] not in self.runq_complete: |
| 2199 | # Skip deferred tasks quickly before the 'expensive' tests below - this is key to performant multiconfig builds | 2205 | # Skip deferred tasks quickly before the 'expensive' tests below - this is key to performant multiconfig builds |
