From ad2238e7882ac0acb37ed5d061207a0e096dab3a Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Mon, 3 Oct 2022 10:19:14 +0200 Subject: [PATCH] Shield disconnect from cancellation Relevant issue: #3942. --- telethon/client/telegrambaseclient.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/telethon/client/telegrambaseclient.py b/telethon/client/telegrambaseclient.py index 426fe5e69..1f0d75e67 100644 --- a/telethon/client/telegrambaseclient.py +++ b/telethon/client/telegrambaseclient.py @@ -598,7 +598,11 @@ def disconnect(self: 'TelegramClient'): await client.disconnect() """ if self.loop.is_running(): - return self._disconnect_coro() + # Disconnect may be called from an event handler, which would + # cancel itself during itself and never actually complete the + # disconnection. Shield the task to prevent disconnect itself + # from being cancelled. See issue #3942 for more details. + return asyncio.shield(self.loop.create_task(self._disconnect_coro())) else: try: self.loop.run_until_complete(self._disconnect_coro())