diff options
Diffstat (limited to 'import-layers/yocto-poky/bitbake/lib/prserv/serv.py')
-rw-r--r-- | import-layers/yocto-poky/bitbake/lib/prserv/serv.py | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/import-layers/yocto-poky/bitbake/lib/prserv/serv.py b/import-layers/yocto-poky/bitbake/lib/prserv/serv.py index cafcc820cd..a7efa58bc7 100644 --- a/import-layers/yocto-poky/bitbake/lib/prserv/serv.py +++ b/import-layers/yocto-poky/bitbake/lib/prserv/serv.py @@ -5,12 +5,7 @@ import threading import queue import socket import io - -try: - import sqlite3 -except ImportError: - from pysqlite2 import dbapi2 as sqlite3 - +import sqlite3 import bb.server.xmlrpc import prserv import prserv.db @@ -242,12 +237,25 @@ class PRServer(SimpleXMLRPCServer): sys.stdout.flush() sys.stderr.flush() + + # We could be called from a python thread with io.StringIO as + # stdout/stderr or it could be 'real' unix fd forking where we need + # to physically close the fds to prevent the program launching us from + # potentially hanging on a pipe. Handle both cases. si = open('/dev/null', 'r') + try: + os.dup2(si.fileno(),sys.stdin.fileno()) + except (AttributeError, io.UnsupportedOperation): + sys.stdin = si 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()) + try: + os.dup2(so.fileno(),sys.stdout.fileno()) + except (AttributeError, io.UnsupportedOperation): + sys.stdout = so + try: + os.dup2(so.fileno(),sys.stderr.fileno()) + except (AttributeError, io.UnsupportedOperation): + sys.stderr = so # Clear out all log handlers prior to the fork() to avoid calling # event handlers not part of the PRserver @@ -420,7 +428,7 @@ class PRServiceConfigError(Exception): def auto_start(d): global singleton - host_params = list(filter(None, (d.getVar('PRSERV_HOST', True) or '').split(':'))) + host_params = list(filter(None, (d.getVar('PRSERV_HOST') or '').split(':'))) if not host_params: return None @@ -431,7 +439,7 @@ def auto_start(d): if is_local_special(host_params[0], int(host_params[1])) and not singleton: import bb.utils - cachedir = (d.getVar("PERSISTENT_DIR", True) or d.getVar("CACHE", True)) + cachedir = (d.getVar("PERSISTENT_DIR") or d.getVar("CACHE")) if not cachedir: logger.critical("Please set the 'PERSISTENT_DIR' or 'CACHE' variable") raise PRServiceConfigError |