diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-12-04 16:58:08 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-12-04 18:02:01 +0000 |
commit | 7e1e4aeea2faa3ca2ebb8cb564e54008479847a2 (patch) | |
tree | 023c134a5c86bdb4b42893ad917b8d5abb2fbc8e | |
parent | e77f0570e8728320d08afa5c37013086632303e8 (diff) | |
download | ast2050-yocto-poky-7e1e4aeea2faa3ca2ebb8cb564e54008479847a2.zip ast2050-yocto-poky-7e1e4aeea2faa3ca2ebb8cb564e54008479847a2.tar.gz |
bitbake: uievent: Fix an init race
There is a race where the registerEventHandler() server call may happen in
a different thread to the main UI, causing the main UI to see
httplib.CannotSendRequest exceptions.
This moves the call into the main thread, removing the init race and fixing
errors I was seeing with the xmlrpc backend.
(Bitbake rev: 14cdd3b351d1ab23cb3ea5f853e403a53e67ac1c)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/ui/uievent.py | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/bitbake/lib/bb/ui/uievent.py b/bitbake/lib/bb/ui/uievent.py index 28817a2..0b9a836 100644 --- a/bitbake/lib/bb/ui/uievent.py +++ b/bitbake/lib/bb/ui/uievent.py @@ -37,6 +37,17 @@ class BBUIEventQueue: self.BBServer = BBServer self.clientinfo = clientinfo + server = UIXMLRPCServer(self.clientinfo) + self.host, self.port = server.socket.getsockname() + + server.register_function( self.system_quit, "event.quit" ) + server.register_function( self.send_event, "event.sendpickle" ) + server.socket.settimeout(1) + + self.EventHandle = self.BBServer.registerEventHandler(self.host, self.port) + + self.server = server + self.t = threading.Thread() self.t.setDaemon(True) self.t.run = self.startCallbackHandler @@ -73,19 +84,9 @@ class BBUIEventQueue: def startCallbackHandler(self): - server = UIXMLRPCServer(self.clientinfo) - self.host, self.port = server.socket.getsockname() - - server.register_function( self.system_quit, "event.quit" ) - server.register_function( self.send_event, "event.sendpickle" ) - server.socket.settimeout(1) - - self.EventHandle = self.BBServer.registerEventHandler(self.host, self.port) - - self.server = server - while not server.quit: - server.handle_request() - server.server_close() + while not self.server.quit: + self.server.handle_request() + self.server.server_close() def system_quit( self ): """ |