summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2013-02-06 15:59:07 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-02-06 23:42:03 +0000
commit2d0bbd9398ab839bd2d1e29e50b25d52efb1ce2a (patch)
treee9904d69d17e0ed85d82d0f7a0f05e6220ea7680
parentd96ef9398356b2a61f7cff765821616bf1e55492 (diff)
downloadbitbake-2d0bbd9398ab839bd2d1e29e50b25d52efb1ce2a.tar.gz
bitbake: Always use separate process for PR Service
Using the threading module interacts badly with multiprocessing used elsewhere in bitbake under certain machine loads. This was leading to bitbake hanging on Ctrl+C when the PR Server was being used. This patch converts it to always use the daemonize code which then means the threading code isn't required. [YOCTO #3742] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/server/process.py2
-rw-r--r--lib/prserv/serv.py29
2 files changed, 8 insertions, 23 deletions
diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py
index 8ebf77187..5e2cade26 100644
--- a/lib/bb/server/process.py
+++ b/lib/bb/server/process.py
@@ -266,5 +266,5 @@ class BitBakeServer(object):
return self.connection
def launchUI(self, uifunc, *args):
- return bb.cooker.server_main(self.cooker, uifunc, *args)
+ return uifunc(*args)
diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py
index d8bdf31ba..719941b32 100644
--- a/lib/prserv/serv.py
+++ b/lib/prserv/serv.py
@@ -97,16 +97,7 @@ class PRServer(SimpleXMLRPCServer):
return
def start(self):
- if self.daemon is True:
- logger.info("PRServer: try to start daemon...")
- self.daemonize()
- else:
- atexit.register(self.delpid)
- pid = str(os.getpid())
- pf = file(self.pidfile, 'w+')
- pf.write("%s\n" % pid)
- pf.close()
- self.work_forever()
+ self.daemonize()
def delpid(self):
os.remove(self.pidfile)
@@ -118,6 +109,7 @@ class PRServer(SimpleXMLRPCServer):
try:
pid = os.fork()
if pid > 0:
+ os.waitpid(pid, 0)
#parent return instead of exit to give control
return
except OSError as e:
@@ -131,7 +123,7 @@ class PRServer(SimpleXMLRPCServer):
try:
pid = os.fork()
if pid > 0: #parent
- sys.exit(0)
+ os._exit(0)
except OSError as e:
raise Exception("%s [%d]" % (e.strerror, e.errno))
@@ -155,7 +147,7 @@ class PRServer(SimpleXMLRPCServer):
pf.close()
self.work_forever()
- sys.exit(0)
+ os._exit(0)
class PRServSingleton():
def __init__(self, dbfile, logfile, interface):
@@ -164,21 +156,14 @@ class PRServSingleton():
self.interface = interface
self.host = None
self.port = None
- self.event = threading.Event()
- def _work(self):
- self.prserv = PRServer(self.dbfile, self.logfile, self.interface, False)
+ def start(self):
+ self.prserv = PRServer(self.dbfile, self.logfile, self.interface)
+ self.prserv.start()
self.host, self.port = self.prserv.getinfo()
- self.event.set()
- self.prserv.work_forever()
del self.prserv.db
- def start(self):
- self.working_thread = threading.Thread(target=self._work)
- self.working_thread.start()
-
def getinfo(self):
- self.event.wait()
return (self.host, self.port)
class PRServerConnection():