diff --git a/Lib/socketserver.py b/Lib/socketserver.py index 9dfd21bab9b6f9..f0377918e89436 100644 --- a/Lib/socketserver.py +++ b/Lib/socketserver.py @@ -230,6 +230,9 @@ def serve_forever(self, poll_interval=0.5): while not self.__shutdown_request: ready = selector.select(poll_interval) + # bpo-35017: shutdown() called during select(), exit immediately. + if self.__shutdown_request: + break if ready: self._handle_request_noblock() diff --git a/Misc/NEWS.d/next/Library/2018-10-26-00-11-21.bpo-35017.6Ez4Cv.rst b/Misc/NEWS.d/next/Library/2018-10-26-00-11-21.bpo-35017.6Ez4Cv.rst new file mode 100644 index 00000000000000..5682717adf70f9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-10-26-00-11-21.bpo-35017.6Ez4Cv.rst @@ -0,0 +1,3 @@ +:meth:`socketserver.BaseServer.serve_forever` now exits immediately if it's +:meth:`~socketserver.BaseServer.shutdown` method is called while it is +polling for new events.