]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Revert "bpo-29406: asyncio SSL contexts leak sockets after calling close with certain...
authorYury Selivanov <yury@magic.io>
Sun, 11 Jun 2017 14:46:35 +0000 (16:46 +0200)
committerGitHub <noreply@github.com>
Sun, 11 Jun 2017 14:46:35 +0000 (16:46 +0200)
This reverts commit a608d2d5a7f1aabe9bcbfc220135c5e126189390.

Lib/asyncio/sslproto.py
Lib/test/test_asyncio/test_sslproto.py
Misc/NEWS

index a36725e0e4453d9077b3efa77d4fc9cfa2bd8164..68499e5aeeae7eed7a924f01225e60e92d9b8ee1 100644 (file)
@@ -6,8 +6,6 @@ except ImportError:  # pragma: no cover
     ssl = None
 
 from . import base_events
-from . import compat
-from . import futures
 from . import protocols
 from . import transports
 from .log import logger
@@ -409,7 +407,7 @@ class SSLProtocol(protocols.Protocol):
 
     def __init__(self, loop, app_protocol, sslcontext, waiter,
                  server_side=False, server_hostname=None,
-                 call_connection_made=True, shutdown_timeout=5.0):
+                 call_connection_made=True):
         if ssl is None:
             raise RuntimeError('stdlib ssl module not available')
 
@@ -440,8 +438,6 @@ class SSLProtocol(protocols.Protocol):
         self._session_established = False
         self._in_handshake = False
         self._in_shutdown = False
-        self._shutdown_timeout = shutdown_timeout
-        self._shutdown_timeout_handle = None
         # transport, ex: SelectorSocketTransport
         self._transport = None
         self._call_connection_made = call_connection_made
@@ -556,15 +552,6 @@ class SSLProtocol(protocols.Protocol):
             self._in_shutdown = True
             self._write_appdata(b'')
 
-        if self._shutdown_timeout is not None:
-            self._shutdown_timeout_handle = self._loop.call_later(
-                self._shutdown_timeout, self._on_shutdown_timeout)
-
-    def _on_shutdown_timeout(self):
-        if self._transport is not None:
-            self._fatal_error(
-                futures.TimeoutError(), 'Can not complete shitdown operation')
-
     def _write_appdata(self, data):
         self._write_backlog.append((data, 0))
         self._write_buffer_size += len(data)
@@ -692,22 +679,12 @@ class SSLProtocol(protocols.Protocol):
             })
         if self._transport:
             self._transport._force_close(exc)
-            self._transport = None
-
-        if self._shutdown_timeout_handle is not None:
-            self._shutdown_timeout_handle.cancel()
-            self._shutdown_timeout_handle = None
 
     def _finalize(self):
         self._sslpipe = None
 
         if self._transport is not None:
             self._transport.close()
-            self._transport = None
-
-        if self._shutdown_timeout_handle is not None:
-            self._shutdown_timeout_handle.cancel()
-            self._shutdown_timeout_handle = None
 
     def _abort(self):
         try:
index 6bcaa9edb4306dd1e736eb7c523c3beb68aff8d2..bcd236ea2632ed728a91a4b485b68ed7c5535f14 100644 (file)
@@ -96,40 +96,6 @@ class SslProtoHandshakeTests(test_utils.TestCase):
         test_utils.run_briefly(self.loop)
         self.assertIsInstance(waiter.exception(), ConnectionAbortedError)
 
-    def test_close_abort(self):
-        # From issue #bpo-29406
-        # abort connection if server does not complete shutdown procedure
-        ssl_proto = self.ssl_protocol()
-        transport = self.connection_made(ssl_proto)
-        ssl_proto._on_handshake_complete(None)
-        ssl_proto._start_shutdown()
-        self.assertIsNotNone(ssl_proto._shutdown_timeout_handle)
-
-        exc_handler = mock.Mock()
-        self.loop.set_exception_handler(exc_handler)
-        ssl_proto._shutdown_timeout_handle._run()
-
-        exc_handler.assert_called_with(
-            self.loop, {'message': 'Can not complete shitdown operation',
-                        'exception': mock.ANY,
-                        'transport': transport,
-                        'protocol': ssl_proto}
-        )
-        self.assertIsNone(ssl_proto._shutdown_timeout_handle)
-
-    def test_close(self):
-        # From issue #bpo-29406
-        # abort connection if server does not complete shutdown procedure
-        ssl_proto = self.ssl_protocol()
-        transport = self.connection_made(ssl_proto)
-        ssl_proto._on_handshake_complete(None)
-        ssl_proto._start_shutdown()
-        self.assertIsNotNone(ssl_proto._shutdown_timeout_handle)
-
-        ssl_proto._finalize()
-        self.assertIsNone(ssl_proto._transport)
-        self.assertIsNone(ssl_proto._shutdown_timeout_handle)
-
     def test_close_during_handshake(self):
         # bpo-29743 Closing transport during handshake process leaks socket
         waiter = asyncio.Future(loop=self.loop)
index 0b0350ef739d66a60a6bea1d553a17b9fd7751ef..9f769869a53552d15df3c2a0944aec3f2b0cf14f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -386,10 +386,6 @@ Library
 - bpo-29743: Closing transport during handshake process leaks open socket.
   Patch by Nikolay Kim
 
-- bpo-29406: asyncio SSL contexts leak sockets after calling close with
-  certain servers.
-  Patch by Nikolay Kim
-
 - bpo-27585: Fix waiter cancellation in asyncio.Lock.
   Patch by Mathieu Sornay.