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.py49
1 files changed, 21 insertions, 28 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index afbc16a9f0..c82affca3c 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -1010,19 +1010,8 @@ class RunQueue:
1010 self.build_pipes[pipe].read() 1010 self.build_pipes[pipe].read()
1011 1011
1012 if self.stats.active > 0: 1012 if self.stats.active > 0:
1013 result = os.waitpid(-1, os.WNOHANG) 1013 if self.runqueue_process_waitpid() is None:
1014 if result[0] is 0 and result[1] is 0:
1015 return 1014 return
1016 task = self.build_pids[result[0]]
1017 del self.build_pids[result[0]]
1018 self.build_pipes[result[0]].close()
1019 del self.build_pipes[result[0]]
1020 if result[1] != 0:
1021 self.task_fail(task, result[1])
1022 return
1023 self.task_complete(task)
1024 self.stats.taskCompleted()
1025 bb.event.fire(runQueueTaskCompleted(task, self.stats, self), self.cfgData)
1026 continue 1015 continue
1027 1016
1028 if len(self.failed_fnids) != 0: 1017 if len(self.failed_fnids) != 0:
@@ -1040,6 +1029,25 @@ class RunQueue:
1040 self.state = runQueueComplete 1029 self.state = runQueueComplete
1041 return 1030 return
1042 1031
1032 def runqueue_process_waitpid(self):
1033 """
1034 Return none is there are no processes awaiting result collection, otherwise
1035 collect the process exit codes and close the information pipe.
1036 """
1037 result = os.waitpid(-1, os.WNOHANG)
1038 if result[0] is 0 and result[1] is 0:
1039 return None
1040 task = self.build_pids[result[0]]
1041 del self.build_pids[result[0]]
1042 self.build_pipes[result[0]].close()
1043 del self.build_pipes[result[0]]
1044 if result[1] != 0:
1045 self.task_fail(task, result[1])
1046 else:
1047 self.task_complete(task)
1048 self.stats.taskCompleted()
1049 bb.event.fire(runQueueTaskCompleted(task, self.stats, self), self.cfgData)
1050
1043 def finish_runqueue_now(self): 1051 def finish_runqueue_now(self):
1044 if self.stats.active: 1052 if self.stats.active:
1045 bb.msg.note(1, bb.msg.domain.RunQueue, "Sending SIGINT to remaining %s tasks" % self.stats.active) 1053 bb.msg.note(1, bb.msg.domain.RunQueue, "Sending SIGINT to remaining %s tasks" % self.stats.active)
@@ -1062,23 +1070,8 @@ class RunQueue:
1062 try: 1070 try:
1063 while self.stats.active > 0: 1071 while self.stats.active > 0:
1064 bb.event.fire(runQueueExitWait(self.stats.active), self.cfgData) 1072 bb.event.fire(runQueueExitWait(self.stats.active), self.cfgData)
1065 #bb.msg.note(1, bb.msg.domain.RunQueue, "Waiting for %s active tasks to finish" % self.stats.active) 1073 if self.runqueue_process_waitpid() is None:
1066 #tasknum = 1
1067 #for k, v in self.build_pids.iteritems():
1068 # bb.msg.note(1, bb.msg.domain.RunQueue, "%s: %s (pid %s)" % (tasknum, self.get_user_idstring(v), k))
1069 # tasknum = tasknum + 1
1070 result = os.waitpid(-1, os.WNOHANG)
1071 if result[0] is 0 and result[1] is 0:
1072 return 1074 return
1073 task = self.build_pids[result[0]]
1074 del self.build_pids[result[0]]
1075 self.build_pipes[result[0]].close()
1076 del self.build_pipes[result[0]]
1077 if result[1] != 0:
1078 self.task_fail(task, result[1])
1079 else:
1080 self.stats.taskCompleted()
1081 bb.event.fire(runQueueTaskCompleted(task, self.stats, self), self.cfgData)
1082 except: 1075 except:
1083 self.finish_runqueue_now() 1076 self.finish_runqueue_now()
1084 raise 1077 raise