Issue #23243, asyncio: Emit a ResourceWarning when an event loop or a transport

is not explicitly closed. Close also explicitly transports in test_sslproto.
This commit is contained in:
Victor Stinner 2015-01-29 17:50:58 +01:00
parent 3c0cf05901
commit 978a9afc6a
10 changed files with 104 additions and 10 deletions

View file

@ -26,6 +26,7 @@ import threading
import time
import traceback
import sys
import warnings
from . import coroutines
from . import events
@ -333,6 +334,16 @@ class BaseEventLoop(events.AbstractEventLoop):
"""Returns True if the event loop was closed."""
return self._closed
# 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 not self.is_closed():
warnings.warn("unclosed event loop %r" % self, ResourceWarning)
if not self.is_running():
self.close()
def is_running(self):
"""Returns True if the event loop is running."""
return (self._owner is not None)