runqueue.py: Add inter setscene task dependency handling
This is being added to resolve setscene race issues where we do have particular dependencies required between setscene tasks. This allows specific dependencies to be specified. This allows us to fix the races in sstate with the useradd class in OE-Core. Any tasks being depended upon have their reverse dependencies cleared to ensure we don't have circular references. (Bitbake rev: e1b157d26374a70e6274edcb4c0b9f3bc48f765c) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Joshua Lock <josh@linux.intel.com>
This commit is contained in:
parent
e1e0dd932b
commit
94c8d01eba
|
@ -1459,6 +1459,28 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
|
||||||
elif len(sq_revdeps_new[task]) != 0:
|
elif len(sq_revdeps_new[task]) != 0:
|
||||||
bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, aborting. Please report this problem.")
|
bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, aborting. Please report this problem.")
|
||||||
|
|
||||||
|
# Resolve setscene inter-task dependencies
|
||||||
|
# e.g. do_sometask_setscene[depends] = "targetname:do_someothertask_setscene"
|
||||||
|
# Note that anything explicitly depended upon will have its reverse dependencies removed to avoid circular dependencies
|
||||||
|
for task in self.rqdata.runq_setscene:
|
||||||
|
realid = self.rqdata.taskData.gettask_id(self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]], self.rqdata.runq_task[task] + "_setscene", False)
|
||||||
|
idepends = self.rqdata.taskData.tasks_idepends[realid]
|
||||||
|
for (depid, idependtask) in idepends:
|
||||||
|
if depid not in self.rqdata.taskData.build_targets:
|
||||||
|
continue
|
||||||
|
|
||||||
|
depdata = self.rqdata.taskData.build_targets[depid][0]
|
||||||
|
if depdata is None:
|
||||||
|
continue
|
||||||
|
dep = self.rqdata.taskData.fn_index[depdata]
|
||||||
|
taskid = self.rqdata.get_task_id(self.rqdata.taskData.getfn_id(dep), idependtask.replace("_setscene", ""))
|
||||||
|
if taskid is None:
|
||||||
|
bb.msg.fatal("RunQueue", "Task %s depends upon nonexistant task %s:%s" % (self.rqdata.taskData.tasks_name[realid], dep, idependtask))
|
||||||
|
|
||||||
|
sq_revdeps_squash[self.rqdata.runq_setscene.index(task)].add(self.rqdata.runq_setscene.index(taskid))
|
||||||
|
# Have to zero this to avoid circular dependencies
|
||||||
|
sq_revdeps_squash[self.rqdata.runq_setscene.index(taskid)] = set()
|
||||||
|
|
||||||
#for task in xrange(len(sq_revdeps_squash)):
|
#for task in xrange(len(sq_revdeps_squash)):
|
||||||
# print "Task %s: %s.%s is %s " % (task, self.taskData.fn_index[self.runq_fnid[self.runq_setscene[task]]], self.runq_task[self.runq_setscene[task]] + "_setscene", sq_revdeps_squash[task])
|
# print "Task %s: %s.%s is %s " % (task, self.taskData.fn_index[self.runq_fnid[self.runq_setscene[task]]], self.runq_task[self.runq_setscene[task]] + "_setscene", sq_revdeps_squash[task])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue