summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYury Selivanov <yury@magic.io>2017-06-11 14:46:53 (GMT)
committerGitHub <noreply@github.com>2017-06-11 14:46:53 (GMT)
commit4e9dfe214dff000c5b5ad0d8bd8a393feed1d3cf (patch)
tree5f1b92271172f385c38966648b43a959d4c24886
parentd24c8287e226ac9983caf6bb826a7b53142ee31f (diff)
downloadcpython-4e9dfe214dff000c5b5ad0d8bd8a393feed1d3cf.zip
cpython-4e9dfe214dff000c5b5ad0d8bd8a393feed1d3cf.tar.gz
cpython-4e9dfe214dff000c5b5ad0d8bd8a393feed1d3cf.tar.bz2
Revert "[3.5] bpo-29406: asyncio SSL contexts leak sockets after calling close with certain servers (GH-409) (#2063)" (#2113)
This reverts commit 1395c58ef7b98f087d1d5d50962fe7a8c032f34d.
-rw-r--r--Lib/asyncio/sslproto.py24
-rw-r--r--Lib/test/test_asyncio/test_sslproto.py34
-rw-r--r--Misc/NEWS4
3 files changed, 1 insertions, 61 deletions
diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py
index 4606f0b..61d478e 100644
--- a/Lib/asyncio/sslproto.py
+++ b/Lib/asyncio/sslproto.py
@@ -7,7 +7,6 @@ except ImportError: # pragma: no cover
from . import base_events
from . import compat
-from . import futures
from . import protocols
from . import transports
from .log import logger
@@ -412,7 +411,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')
@@ -443,8 +442,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
@@ -559,15 +556,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)
@@ -695,22 +683,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:
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 6bcaa9e..bcd236e 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -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)
diff --git a/Misc/NEWS b/Misc/NEWS
index e8f9445..255f146 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -69,10 +69,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.