From fb2c3465f09e1f720cdae7eca87d62125a327fd9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 10 Jan 2019 11:24:40 +0100 Subject: asyncio: __del__() keep reference to warnings.warn (GH-11491) * asyncio: __del__() keep reference to warnings.warn The __del__() methods of asyncio classes now keep a strong reference to the warnings.warn() to be able to display the ResourceWarning warning in more cases. Ensure that the function remains available if instances are destroyed late during Python shutdown (while module symbols are cleared). * Rename warn parameter to _warn "_warn" name is a hint that it's not the regular warnings.warn() function. --- Lib/asyncio/selector_events.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Lib/asyncio/selector_events.py') diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py index 112c4b15b8d..93b68895094 100644 --- a/Lib/asyncio/selector_events.py +++ b/Lib/asyncio/selector_events.py @@ -658,10 +658,9 @@ class _SelectorTransport(transports._FlowControlMixin, self._loop._remove_writer(self._sock_fd) self._loop.call_soon(self._call_connection_lost, None) - def __del__(self): + def __del__(self, _warn=warnings.warn): if self._sock is not None: - warnings.warn(f"unclosed transport {self!r}", ResourceWarning, - source=self) + _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) self._sock.close() def _fatal_error(self, exc, message='Fatal error on transport'): -- cgit v1.2.3