diff options
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 2a1299db39..886eef1f27 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1975,11 +1975,19 @@ class RunQueueExecute: | |||
1975 | self.setbuildable(revdep) | 1975 | self.setbuildable(revdep) |
1976 | logger.debug(1, "Marking task %s as buildable", revdep) | 1976 | logger.debug(1, "Marking task %s as buildable", revdep) |
1977 | 1977 | ||
1978 | for t in self.sq_deferred.copy(): | 1978 | found = None |
1979 | for t in sorted(self.sq_deferred.copy()): | ||
1979 | if self.sq_deferred[t] == task: | 1980 | if self.sq_deferred[t] == task: |
1980 | logger.debug(2, "Deferred task %s now buildable" % t) | 1981 | # Allow the next deferred task to run. Any other deferred tasks should be deferred after that task. |
1981 | del self.sq_deferred[t] | 1982 | # We shouldn't allow all to run at once as it is prone to races. |
1982 | update_scenequeue_data([t], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False) | 1983 | if not found: |
1984 | bb.note("Deferred task %s now buildable" % t) | ||
1985 | del self.sq_deferred[t] | ||
1986 | update_scenequeue_data([t], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False) | ||
1987 | found = t | ||
1988 | else: | ||
1989 | bb.note("Deferring %s after %s" % (t, found)) | ||
1990 | self.sq_deferred[t] = found | ||
1983 | 1991 | ||
1984 | def task_complete(self, task): | 1992 | def task_complete(self, task): |
1985 | self.stats.taskCompleted() | 1993 | self.stats.taskCompleted() |