From 5b9472155d5032b1310f53c6c6f72fc1d906230b Mon Sep 17 00:00:00 2001 From: Sam Bull Date: Mon, 26 Aug 2024 21:37:16 +0100 Subject: [PATCH] Fix unclosed transport warning (#8875) (cherry picked from commit 0478f143caba33c7f6b355b8513e3c26d8db7d4d) --- CHANGES/8875.bugfix.rst | 1 + aiohttp/web_protocol.py | 15 +++------------ setup.cfg | 2 -- 3 files changed, 4 insertions(+), 14 deletions(-) create mode 100644 CHANGES/8875.bugfix.rst diff --git a/CHANGES/8875.bugfix.rst b/CHANGES/8875.bugfix.rst new file mode 100644 index 00000000000..fa33df05ae2 --- /dev/null +++ b/CHANGES/8875.bugfix.rst @@ -0,0 +1 @@ +Fixed an unclosed transport ``ResourceWarning`` on web handlers -- by :user:`Dreamsorcerer`. diff --git a/aiohttp/web_protocol.py b/aiohttp/web_protocol.py index a4941d103ef..a2f159c3b7c 100644 --- a/aiohttp/web_protocol.py +++ b/aiohttp/web_protocol.py @@ -260,9 +260,6 @@ async def shutdown(self, timeout: Optional[float] = 15.0) -> None: if self._keepalive_handle is not None: self._keepalive_handle.cancel() - if self._waiter: - self._waiter.cancel() - # Wait for graceful handler completion if self._handler_waiter is not None: with suppress(asyncio.CancelledError, asyncio.TimeoutError): @@ -281,9 +278,7 @@ async def shutdown(self, timeout: Optional[float] = 15.0) -> None: if self._task_handler is not None: self._task_handler.cancel() - if self.transport is not None: - self.transport.close() - self.transport = None + self.force_close() def connection_made(self, transport: asyncio.BaseTransport) -> None: super().connection_made(transport) @@ -307,13 +302,12 @@ def connection_lost(self, exc: Optional[BaseException]) -> None: return self._manager.connection_lost(self, exc) - super().connection_lost(exc) - # Grab value before setting _manager to None. handler_cancellation = self._manager.handler_cancellation + self.force_close() + super().connection_lost(exc) self._manager = None - self._force_close = True self._request_factory = None self._request_handler = None self._request_parser = None @@ -326,9 +320,6 @@ def connection_lost(self, exc: Optional[BaseException]) -> None: exc = ConnectionResetError("Connection lost") self._current_request._cancel(exc) - if self._waiter is not None: - self._waiter.cancel() - if handler_cancellation and self._task_handler is not None: self._task_handler.cancel() diff --git a/setup.cfg b/setup.cfg index 71ed6b98e0e..bd93b00cb2f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -138,8 +138,6 @@ addopts = filterwarnings = error ignore:module 'ssl' has no attribute 'OP_NO_COMPRESSION'. The Python interpreter is compiled against OpenSSL < 1.0.0. Ref. https.//docs.python.org/3/library/ssl.html#ssl.OP_NO_COMPRESSION:UserWarning - ignore:unclosed transport :ResourceWarning ignore:Unclosed client session