]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake: Correctly route events from the worker to the server
authorRichard Purdie <rpurdie@linux.intel.com>
Fri, 20 Aug 2010 11:25:19 +0000 (12:25 +0100)
committerRichard Purdie <rpurdie@linux.intel.com>
Fri, 20 Aug 2010 11:26:19 +0000 (12:26 +0100)
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake/bin/bitbake-runtask
bitbake/lib/bb/build.py
bitbake/lib/bb/event.py
bitbake/lib/bb/msg.py
bitbake/lib/bb/runqueue.py

index 417f3949cd4690aa727379afb4cd3df5df82bd58..dee25cdf276817f43df949eade69af9671404760 100755 (executable)
@@ -31,19 +31,26 @@ warnings.simplefilter("ignore", DeprecationWarning)
 
 import bb.event
 
-# Need to map our I/O correctly. Currently stdout is a pipe to 
-# the server expecting events. We save this and map stdout to stderr.
+# Need to map our I/O correctly. stdout is a pipe to the server expecting 
+# events. We save this and then map stdout to stderr.
 
 eventfd = os.dup(sys.stdout.fileno())
 bb.event.worker_pipe = os.fdopen(eventfd, 'w', 0)
-# Replace those fds with our own
+
+# map stdout to stderr
 os.dup2(sys.stderr.fileno(), sys.stdout.fileno())
 
+# Replace those fds with our own
+#logout = data.expand("${TMPDIR}/log/stdout.%s" % os.getpid(), self.cfgData, True)
+#mkdirhier(os.path.dirname(logout))
+#newso = open("/tmp/stdout.%s" % os.getpid(), 'w')
+#os.dup2(newso.fileno(), sys.stdout.fileno())
+#os.dup2(newso.fileno(), sys.stderr.fileno())
+
 # Save out the PID so that the event can include it the
 # events
 bb.event.worker_pid = os.getpid()
-bb.event.usestdout = False
-
+bb.event.useStdout = False
 
 import bb.cooker
 
index 77af92abeeb2dd0d354de308b7e44053932da8c0..f49b2836b6dd7ff705aa5e1dd114c658d4ef4192 100644 (file)
@@ -152,6 +152,9 @@ def exec_func(func, d, dirs = None):
     os.dup2(so.fileno(), oso[1])
     os.dup2(se.fileno(), ose[1])
 
+    # Since we've remapped stdout and stderr, its safe for log messages to be printed there now
+    # exec_func can nest so we have to save state
+    origstdout = bb.event.useStdout
     bb.event.useStdout = True
 
     locks = []
@@ -179,7 +182,10 @@ def exec_func(func, d, dirs = None):
         for lock in locks:
             bb.utils.unlockfile(lock)
 
-        bb.event.useStdout = False
+        sys.stdout.flush()
+        sys.stderr.flush()
+
+        bb.event.useStdout = origstdout
 
         # Restore the backup fds
         os.dup2(osi[0], osi[1])
index f5ba6eab3c820c1f7d2feb07e0157efcf84eede5..45458c2d638fa57d794993bd2ccdf7aa3099ce7f 100644 (file)
@@ -110,6 +110,7 @@ def fire_from_worker(event, d):
     if not event.startswith("<event>") or not event.endswith("</event>"):
         print("Error, not an event %s" % event)
         return
+    #print "Got event %s" % event
     event = pickle.loads(event[7:-8])
     fire_ui_handlers(event, d)
 
index 5bb30e8dd30b230dfa09a3fd7dc93ccf1fbd18f0..21692d930db674650a3174b0de8933df75b953b7 100644 (file)
@@ -133,7 +133,9 @@ def error(msgdomain, msg, fn = None):
 
 def fatal(msgdomain, msg, fn = None):
     bb.event.fire(MsgFatal(msg), None)
-    print('FATAL: %s' % (msg))
+
+    if bb.event.useStdout:
+        print('FATAL: %s' % (msg))
     sys.exit(1)
 
 def plain(msg, fn = None):
index 67f265bc80827eccfe09110c79d572cff7a4d7e4..ef5256f14c9cbcf03157747862a6e2eccda619e4 100644 (file)
@@ -1467,5 +1467,5 @@ class runQueuePipe():
         while self.read():
             continue
         if len(self.queue) > 0:
-            print("Warning, worker left partial message")
+            print("Warning, worker left partial message: %s" % self.queue)
         self.fd.close()