[bitbake-devel] [PATCH] prserv/serv: Tweak stdout manipulation to be stream safe

Richard Purdie richard.purdie at linuxfoundation.org
Wed Jan 4 23:48:40 UTC 2017


We've been seeing oe-selftest failures under puzzling circumstances. It
turns out if you run oe-selftest on a machine with xmlrunner installed
and have the recent tinfoil2 changes, the launching of PR server crashes
leading to selftest hanging if using an autoloaded PR server.

The reason is that xmlrunner uses an io.StringIO object as stdout/stderr
instead of the usual io.TextIOWrapper and StringIO lacks a fileno() method.

This code was copied from build.py from what I remember and in that case we
need to retain copies of the old file descriptors, hence the use of os.dup2.
As far as I can tell, here, we can just overwrite the handles directly and
hence avoid this rather puzzling crash.

[YOCTO #10866]

Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 lib/prserv/serv.py | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py
index 350b085..965793d 100644
--- a/lib/prserv/serv.py
+++ b/lib/prserv/serv.py
@@ -242,12 +242,9 @@ class PRServer(SimpleXMLRPCServer):
 
         sys.stdout.flush()
         sys.stderr.flush()
-        si = open('/dev/null', 'r')
-        so = open(self.logfile, 'a+')
-        se = so
-        os.dup2(si.fileno(),sys.stdin.fileno())
-        os.dup2(so.fileno(),sys.stdout.fileno())
-        os.dup2(se.fileno(),sys.stderr.fileno())
+        sys.stdin = open('/dev/null', 'r')
+        sys.stdout = open(self.logfile, 'a+')
+        sys.stderr = sys.stdout
 
         # Clear out all log handlers prior to the fork() to avoid calling
         # event handlers not part of the PRserver
-- 
2.7.4




More information about the bitbake-devel mailing list