diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-01-29 17:32:39 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-01-29 17:32:39 +0100 |
commit | 190e78603a4ce58a2f248fdf8a3472fa1fc6c064 (patch) | |
tree | 0990f66b83b12d6466ba5042bfbb0b02442ab5e7 /asyncio/selector_events.py | |
parent | a1611f147decd003b0ffe5d10eb011d0b8c2725e (diff) | |
download | trollius-master.tar.gz |
event loop or a transport is not explicitly closed
Diffstat (limited to 'asyncio/selector_events.py')
-rw-r--r-- | asyncio/selector_events.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/asyncio/selector_events.py b/asyncio/selector_events.py index 9147832..4bd6dc8 100644 --- a/asyncio/selector_events.py +++ b/asyncio/selector_events.py @@ -10,6 +10,8 @@ import collections import errno import functools import socket +import sys +import warnings try: import ssl except ImportError: # pragma: no cover @@ -499,6 +501,11 @@ class _SelectorTransport(transports._FlowControlMixin, _buffer_factory = bytearray # Constructs initial value for self._buffer. + # Attribute used in the destructor: it must be set even if the constructor + # is not called (see _SelectorSslTransport which may start by raising an + # exception) + _sock = None + def __init__(self, loop, sock, protocol, extra=None, server=None): super().__init__(extra, loop) self._extra['socket'] = sock @@ -559,6 +566,15 @@ class _SelectorTransport(transports._FlowControlMixin, self._conn_lost += 1 self._loop.call_soon(self._call_connection_lost, None) + # On Python 3.3 and older, objects with a destructor part of a reference + # cycle are never destroyed. It's not more the case on Python 3.4 thanks + # to the PEP 442. + if sys.version_info >= (3, 4): + def __del__(self): + if self._sock is not None: + warnings.warn("unclosed transport %r" % self, ResourceWarning) + self._sock.close() + def _fatal_error(self, exc, message='Fatal error on transport'): # Should be called from exception handler only. if isinstance(exc, (BrokenPipeError, |