bpo-29711: Fix stop_serving in proactor loop kill all listening servers (#431)
This commit is contained in:
parent
36c2c04478
commit
319c0345cd
|
@ -536,6 +536,8 @@ class BaseProactorEventLoop(base_events.BaseEventLoop):
|
|||
self._accept_futures.clear()
|
||||
|
||||
def _stop_serving(self, sock):
|
||||
self._stop_accept_futures()
|
||||
future = self._accept_futures.pop(sock.fileno(), None)
|
||||
if future:
|
||||
future.cancel()
|
||||
self._proactor._stop_serving(sock)
|
||||
sock.close()
|
||||
|
|
|
@ -567,10 +567,21 @@ class BaseProactorEventLoopTests(test_utils.TestCase):
|
|||
self.assertTrue(self.sock.close.called)
|
||||
|
||||
def test_stop_serving(self):
|
||||
sock = mock.Mock()
|
||||
self.loop._stop_serving(sock)
|
||||
self.assertTrue(sock.close.called)
|
||||
self.proactor._stop_serving.assert_called_with(sock)
|
||||
sock1 = mock.Mock()
|
||||
future1 = mock.Mock()
|
||||
sock2 = mock.Mock()
|
||||
future2 = mock.Mock()
|
||||
self.loop._accept_futures = {
|
||||
sock1.fileno(): future1,
|
||||
sock2.fileno(): future2
|
||||
}
|
||||
|
||||
self.loop._stop_serving(sock1)
|
||||
self.assertTrue(sock1.close.called)
|
||||
self.assertTrue(future1.cancel.called)
|
||||
self.proactor._stop_serving.assert_called_with(sock1)
|
||||
self.assertFalse(sock2.close.called)
|
||||
self.assertFalse(future2.cancel.called)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix ``stop_serving`` in asyncio proactor loop kill all listening servers
|
Loading…
Reference in New Issue