diff options
author | sigbjorn <sigbjorn@opera.com> | 2015-01-09 00:02:26 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-09 08:03:13 +0000 |
commit | 1e630129a6dbb309618c97d0b63a1c42d689e679 (patch) | |
tree | dd432c1e0fcdbc2358fdebcae0b2da452f5d52fe /sync | |
parent | 66c9d8a2572d58e4dc5d471318232d6d49c3347b (diff) | |
download | chromium_src-1e630129a6dbb309618c97d0b63a1c42d689e679.zip chromium_src-1e630129a6dbb309618c97d0b63a1c42d689e679.tar.gz chromium_src-1e630129a6dbb309618c97d0b63a1c42d689e679.tar.bz2 |
Make Python sync server stoppable
The testserver attempts to inherit from StoppableHTTPServer, but then
overrides the stoppable functionality. Instead of overriding serve_forever, override handle_request, to maintain stoppability.
BUG=
Review URL: https://codereview.chromium.org/797253003
Cr-Commit-Position: refs/heads/master@{#310732}
Diffstat (limited to 'sync')
-rwxr-xr-x | sync/tools/testserver/sync_testserver.py | 79 |
1 files changed, 38 insertions, 41 deletions
diff --git a/sync/tools/testserver/sync_testserver.py b/sync/tools/testserver/sync_testserver.py index b3ca642..d65be40 100755 --- a/sync/tools/testserver/sync_testserver.py +++ b/sync/tools/testserver/sync_testserver.py @@ -70,10 +70,8 @@ class SyncHTTPServer(testserver_base.ClientRestrictingServerMixIn, def GetAuthenticated(self): return self.authenticated - def serve_forever(self): - """This is a merge of asyncore.loop() and SocketServer.serve_forever(). - """ - + def handle_request(self): + """Adaptation of asyncore.loop""" def HandleXmppSocket(fd, socket_map, handler): """Runs the handler for the xmpp connection for fd. @@ -92,44 +90,43 @@ class SyncHTTPServer(testserver_base.ClientRestrictingServerMixIn, except: xmpp_connection.handle_error() - while True: - read_fds = [ self.fileno() ] - write_fds = [] - exceptional_fds = [] - - for fd, xmpp_connection in self._xmpp_socket_map.items(): - is_r = xmpp_connection.readable() - is_w = xmpp_connection.writable() - if is_r: - read_fds.append(fd) - if is_w: - write_fds.append(fd) - if is_r or is_w: - exceptional_fds.append(fd) + read_fds = [ self.fileno() ] + write_fds = [] + exceptional_fds = [] - try: - read_fds, write_fds, exceptional_fds = ( - select.select(read_fds, write_fds, exceptional_fds)) - except select.error, err: - if err.args[0] != errno.EINTR: - raise - else: - continue - - for fd in read_fds: - if fd == self.fileno(): - self.HandleRequestNoBlock() - continue - HandleXmppSocket(fd, self._xmpp_socket_map, - asyncore.dispatcher.handle_read_event) - - for fd in write_fds: - HandleXmppSocket(fd, self._xmpp_socket_map, - asyncore.dispatcher.handle_write_event) - - for fd in exceptional_fds: - HandleXmppSocket(fd, self._xmpp_socket_map, - asyncore.dispatcher.handle_expt_event) + for fd, xmpp_connection in self._xmpp_socket_map.items(): + is_r = xmpp_connection.readable() + is_w = xmpp_connection.writable() + if is_r: + read_fds.append(fd) + if is_w: + write_fds.append(fd) + if is_r or is_w: + exceptional_fds.append(fd) + + try: + read_fds, write_fds, exceptional_fds = ( + select.select(read_fds, write_fds, exceptional_fds)) + except select.error, err: + if err.args[0] != errno.EINTR: + raise + else: + return + + for fd in read_fds: + if fd == self.fileno(): + self.HandleRequestNoBlock() + return + HandleXmppSocket(fd, self._xmpp_socket_map, + asyncore.dispatcher.handle_read_event) + + for fd in write_fds: + HandleXmppSocket(fd, self._xmpp_socket_map, + asyncore.dispatcher.handle_write_event) + + for fd in exceptional_fds: + HandleXmppSocket(fd, self._xmpp_socket_map, + asyncore.dispatcher.handle_expt_event) class SyncPageHandler(testserver_base.BasePageHandler): |