diff options
author | Kali Kaneko <kali@leap.se> | 2013-08-14 22:35:45 +0200 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2013-08-14 22:35:45 +0200 |
commit | fa530521c4d1d2b86481753058983d516155057d (patch) | |
tree | 0ee1bd3ec08cc0dbb4f91b0c933520c6388f60fb | |
parent | 0e721b1b47c3b94f6d4d6709e34b6b816f9fd810 (diff) | |
parent | 85e00e17ab54af7f26d3c2c51e4bd72f8cc9b778 (diff) |
Merge remote-tracking branch 'chiiph-github/bug/ensure_server_async' into develop
-rw-r--r-- | changes/bug_make_ping_async | 2 | ||||
-rw-r--r-- | src/leap/common/events/server.py | 28 |
2 files changed, 23 insertions, 7 deletions
diff --git a/changes/bug_make_ping_async b/changes/bug_make_ping_async new file mode 100644 index 0000000..692518c --- /dev/null +++ b/changes/bug_make_ping_async @@ -0,0 +1,2 @@ + o Make the server ping call be async inside events' + ensure_server. Fixes #3355.
\ No newline at end of file diff --git a/src/leap/common/events/server.py b/src/leap/common/events/server.py index 59f3454..861cb4f 100644 --- a/src/leap/common/events/server.py +++ b/src/leap/common/events/server.py @@ -77,18 +77,32 @@ def ensure_server(port=SERVER_PORT): s.connect(('localhost', port)) s.close() # port is taken, check if there's a server running there - response = ping(port) - if response is not None and response.status == proto.EventResponse.OK: - logger.info('A server is already running on port %d.', port) - return None - # port is taken, and not by an events server - logger.info('Port %d is taken by something not an events server.', port) - raise PortAlreadyTaken(port) + ping(port, + reqcbk=lambda req, res: process_ping(port, req, res), + timeout=10) except socket.error: # port is available, run a server logger.info('Launching server on port %d.', port) return EventsServerDaemon.ensure(port) +def process_ping(port, request, response): + """ + Response callback for the ping event. + + :param port: Port that is trying to be used + :type port: int + :param request: Ping request made + :type request: proto.PingRequest + :param response: Response from the event + :type response: proto.EventResponse + """ + if response is not None and response.status == proto.EventResponse.OK: + logger.info('A server is already running on port %d.', port) + return + # port is taken, and not by an events server + logger.info('Port %d is taken by something not an events server.', port) + raise PortAlreadyTaken(port) + def ping(port=SERVER_PORT, reqcbk=None, timeout=1000): """ |