From b8028541c9a594900b20764750f821a24573f01d Mon Sep 17 00:00:00 2001 From: "Hitalo M." Date: Wed, 30 Apr 2025 18:33:48 -0300 Subject: [PATCH] fix(session): prevent task cancellation race condition in stop method The fix properly cancels the recv_task and suppresses CancelledError when awaiting it during session shutdown. This resolves the "read() called while another coroutine is already waiting for incoming data" RuntimeError that occurred when stopping sessions during reconnection attempts. Signed-off-by: wulan17 --- pyrogram/session/session.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index e60d48c6..79801086 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -19,6 +19,7 @@ import asyncio import bisect +import contextlib import logging import os from datetime import datetime, timedelta @@ -179,7 +180,9 @@ class Session: await self.connection.close() if self.recv_task: - await self.recv_task + self.recv_task.cancel() + with contextlib.suppress(asyncio.CancelledError): + await self.recv_task if not self.is_media and callable(self.client.disconnect_handler): try: