]> code.ossystems Code Review - openembedded-core.git/commitdiff
runqueue.py: Use fcntl to make the worker pipes non-blocking
authorRichard Purdie <rpurdie@linux.intel.com>
Thu, 21 Jan 2010 23:46:20 +0000 (23:46 +0000)
committerRichard Purdie <rpurdie@linux.intel.com>
Thu, 21 Jan 2010 23:46:20 +0000 (23:46 +0000)
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake/lib/bb/runqueue.py

index 7a34ba9f7e1d801eca57839a1e87e489bbe6fce0..1f9907b9d58f00c656db31c5fb9bdd1cd68d1c71 100644 (file)
@@ -26,6 +26,7 @@ from bb import msg, data, event, mkdirhier, utils
 import bb, os, sys
 import signal
 import stat
+import fcntl
 
 class TaskFailure(Exception):
     """Exception raised when a task in a runqueue fails"""
@@ -1161,12 +1162,16 @@ class runQueuePipe():
     def __init__(self, pipein, pipeout, d):
         self.fd = pipein
         os.close(pipeout)
+        fcntl.fcntl(self.fd, fcntl.F_SETFL, fcntl.fcntl(self.fd, fcntl.F_GETFL) | os.O_NONBLOCK)
         self.queue = ""
         self.d = d
 
     def read(self):
         start = len(self.queue)
-        self.queue = self.queue + os.read(self.fd, 1024)
+        try:
+            self.queue = self.queue + os.read(self.fd, 1024)
+        except OSError:
+            pass
         end = len(self.queue)
         index = self.queue.find("</event>")
         while index != -1: