From e768a4efab3217bd765bad2e19d2ea03b5b0c2c2 Mon Sep 17 00:00:00 2001 From: Taylor Braun-Jones Date: Fri, 17 Jan 2025 16:48:19 -0500 Subject: [PATCH] Fix long hang under certain network failures --- gql/transport/websockets.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gql/transport/websockets.py b/gql/transport/websockets.py index c385d3d7..02abb61f 100644 --- a/gql/transport/websockets.py +++ b/gql/transport/websockets.py @@ -7,6 +7,7 @@ from graphql import DocumentNode, ExecutionResult, print_ast from websockets.datastructures import HeadersLike +from websockets.exceptions import ConnectionClosed from websockets.typing import Subprotocol from .exceptions import ( @@ -505,10 +506,15 @@ async def _after_initialize(self): self.send_ping_task = asyncio.ensure_future(self._send_ping_coro()) async def _close_hook(self): + log.debug("_close_hook: start") # Properly shut down the send ping task if enabled if self.send_ping_task is not None: + log.debug("_close_hook: cancelling send_ping_task") self.send_ping_task.cancel() - with suppress(asyncio.CancelledError): + with suppress(asyncio.CancelledError, ConnectionClosed): + log.debug("_close_hook: awaiting send_ping_task") await self.send_ping_task self.send_ping_task = None + + log.debug("_close_hook: end")