summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/runqueue.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r--bitbake/lib/bb/runqueue.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 95cab5132f..e86ccd8c61 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -1840,6 +1840,7 @@ class RunQueueExecute:
1840 self.failed_tids = [] 1840 self.failed_tids = []
1841 self.sq_deferred = {} 1841 self.sq_deferred = {}
1842 self.sq_needed_harddeps = set() 1842 self.sq_needed_harddeps = set()
1843 self.sq_harddep_deferred = set()
1843 1844
1844 self.stampcache = {} 1845 self.stampcache = {}
1845 1846
@@ -2163,7 +2164,7 @@ class RunQueueExecute:
2163 if not self.sqdone and self.can_start_task(): 2164 if not self.sqdone and self.can_start_task():
2164 # Find the next setscene to run 2165 # Find the next setscene to run
2165 for nexttask in self.sorted_setscene_tids: 2166 for nexttask in self.sorted_setscene_tids:
2166 if nexttask in self.sq_buildable and nexttask not in self.sq_running and self.sqdata.stamps[nexttask] not in self.build_stamps.values(): 2167 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:
2167 if nexttask not in self.sqdata.unskippable and self.sqdata.sq_revdeps[nexttask] and \ 2168 if nexttask not in self.sqdata.unskippable and self.sqdata.sq_revdeps[nexttask] and \
2168 nexttask not in self.sq_needed_harddeps and \ 2169 nexttask not in self.sq_needed_harddeps and \
2169 self.sqdata.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and \ 2170 self.sqdata.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and \
@@ -2184,6 +2185,7 @@ class RunQueueExecute:
2184 self.sq_buildable.add(dep) 2185 self.sq_buildable.add(dep)
2185 self.sq_needed_harddeps.add(dep) 2186 self.sq_needed_harddeps.add(dep)
2186 updated = True 2187 updated = True
2188 self.sq_harddep_deferred.add(nexttask)
2187 if updated: 2189 if updated:
2188 return True 2190 return True
2189 continue 2191 continue
@@ -2678,6 +2680,7 @@ class RunQueueExecute:
2678 if changed: 2680 if changed:
2679 self.stats.updateCovered(len(self.scenequeue_covered), len(self.scenequeue_notcovered)) 2681 self.stats.updateCovered(len(self.scenequeue_covered), len(self.scenequeue_notcovered))
2680 self.sq_needed_harddeps = set() 2682 self.sq_needed_harddeps = set()
2683 self.sq_harddep_deferred = set()
2681 self.holdoff_need_update = True 2684 self.holdoff_need_update = True
2682 2685
2683 def scenequeue_updatecounters(self, task, fail=False): 2686 def scenequeue_updatecounters(self, task, fail=False):
@@ -2712,6 +2715,13 @@ class RunQueueExecute:
2712 new.add(dep) 2715 new.add(dep)
2713 next = new 2716 next = new
2714 2717
2718 # If this task was one which other setscene tasks have a hard dependency upon, we need
2719 # to walk through the hard dependencies and allow execution of those which have completed dependencies.
2720 if task in self.sqdata.sq_harddeps:
2721 for dep in self.sq_harddep_deferred.copy():
2722 if self.sqdata.sq_harddeps_rev[dep].issubset(self.scenequeue_covered | self.scenequeue_notcovered):
2723 self.sq_harddep_deferred.remove(dep)
2724
2715 self.stats.updateCovered(len(self.scenequeue_covered), len(self.scenequeue_notcovered)) 2725 self.stats.updateCovered(len(self.scenequeue_covered), len(self.scenequeue_notcovered))
2716 self.holdoff_need_update = True 2726 self.holdoff_need_update = True
2717 2727