summaryrefslogtreecommitdiffstats
path: root/sync/tools
diff options
context:
space:
mode:
authorsigbjorn <sigbjorn@opera.com>2015-01-09 00:02:26 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-09 08:03:13 +0000
commit1e630129a6dbb309618c97d0b63a1c42d689e679 (patch)
treedd432c1e0fcdbc2358fdebcae0b2da452f5d52fe /sync/tools
parent66c9d8a2572d58e4dc5d471318232d6d49c3347b (diff)
downloadchromium_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/tools')
-rwxr-xr-xsync/tools/testserver/sync_testserver.py79
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):