summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-03-19 17:44:39 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-03-19 17:46:33 +0000
commit49aad7da07e187f206e963001844605731b01247 (patch)
treea019fc9b60ba839bccb143be6e7f268319641881
parent99913df3039665816ca506be4112913a1eca8e88 (diff)
downloadpoky-49aad7da07e187f206e963001844605731b01247.tar.gz
bitbake: runqueue: Remove use of waitpid on worker processes
Use of waitpid on the worker processes is a bad idea since it conflicts directly with subprocess internals. Instead use the poll() method and returncode to determine if the process has exitted, if it has, we can shut down the system. This should resolve the hangs once and for all, famous last words. (Bitbake rev: 60969cd62e21e7d4af161bf8504b7643a879c73f) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/runqueue.py28
1 files changed, 12 insertions, 16 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index e62bb5232f..dbb334c55f 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -2090,22 +2090,18 @@ class runQueuePipe():
2090 self.rqexec = rqexec 2090 self.rqexec = rqexec
2091 2091
2092 def read(self): 2092 def read(self):
2093 try: 2093 for w in [self.rq.worker, self.rq.fakeworker]:
2094 for w in [self.rq.worker, self.rq.fakeworker]: 2094 if not w:
2095 if not w: 2095 continue
2096 continue 2096 w.poll()
2097 pid, status = os.waitpid(w.pid, os.WNOHANG) 2097 if w.returncode is not None and not self.rq.teardown:
2098 if pid != 0 and not self.rq.teardown: 2098 name = None
2099 if self.rq.worker and pid == self.rq.worker.pid: 2099 if self.rq.worker and w.pid == self.rq.worker.pid:
2100 name = "Worker" 2100 name = "Worker"
2101 elif self.rq.fakeworker and pid == self.rq.fakeworker.pid: 2101 elif self.rq.fakeworker and w.pid == self.rq.fakeworker.pid:
2102 name = "Fakeroot" 2102 name = "Fakeroot"
2103 else: 2103 bb.error("%s process (%s) exited unexpectedly (%s), shutting down..." % (name, w.pid, str(w.returncode)))
2104 name = "Unknown" 2104 self.rq.finish_runqueue(True)
2105 bb.error("%s process (%s) exited unexpectedly (%s), shutting down..." % (name, pid, str(status)))
2106 self.rq.finish_runqueue(True)
2107 except OSError:
2108 pass
2109 2105
2110 start = len(self.queue) 2106 start = len(self.queue)
2111 try: 2107 try: