From: Antoine Pitrou Date: Wed, 30 Nov 2016 16:40:46 +0000 (+0100) Subject: Fix #1901: fix TCPServer.stop() when called twice X-Git-Tag: v4.5.0~53^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7d62ce8911dba64b97684c45fca694eae1ca4664;p=thirdparty%2Ftornado.git Fix #1901: fix TCPServer.stop() when called twice --- diff --git a/tornado/tcpserver.py b/tornado/tcpserver.py index 54837f7a6..31f49359a 100644 --- a/tornado/tcpserver.py +++ b/tornado/tcpserver.py @@ -109,6 +109,7 @@ class TCPServer(object): self._sockets = {} # fd -> socket object self._pending_sockets = [] self._started = False + self._stopped = False self.max_buffer_size = max_buffer_size self.read_chunk_size = read_chunk_size @@ -227,7 +228,11 @@ class TCPServer(object): Requests currently in progress may still continue after the server is stopped. """ + if self._stopped: + return + self._stopped = True for fd, sock in self._sockets.items(): + assert sock.fileno() == fd self.io_loop.remove_handler(fd) sock.close() diff --git a/tornado/test/tcpserver_test.py b/tornado/test/tcpserver_test.py index c01c04ddf..5c51c71f0 100644 --- a/tornado/test/tcpserver_test.py +++ b/tornado/test/tcpserver_test.py @@ -1,4 +1,5 @@ from __future__ import absolute_import, division, print_function, with_statement + import socket from tornado import gen @@ -37,3 +38,11 @@ class TCPServerTest(AsyncTestCase): server.stop() if client is not None: client.close() + + def test_stop_twice(self): + sock, port = bind_unused_port() + server = TCPServer() + server.add_socket(sock) + server.stop() + server.stop() +