Add check for asyncio event loop to remain the same

This commit is contained in:
Lonami Exo
2023-05-24 19:15:46 +02:00
parent 6a7a981b7a
commit 16122545ec
3 changed files with 50 additions and 0 deletions

View File

@@ -399,6 +399,7 @@ class TelegramBaseClient(abc.ABC):
self._borrowed_senders = {}
self._borrow_sender_lock = asyncio.Lock()
self._loop = None # only used as a sanity check
self._updates_error = None
self._updates_handle = None
self._keepalive_handle = None
@@ -535,6 +536,11 @@ class TelegramBaseClient(abc.ABC):
if self.session is None:
raise ValueError('TelegramClient instance cannot be reused after logging out')
if self._loop is None:
self._loop = helpers.get_running_loop()
elif self._loop != helpers.get_running_loop():
raise RuntimeError('The asyncio event loop must not change after connection (see the FAQ for details)')
if not await self._sender.connect(self._connection(
self.session.server_address,
self.session.port,

View File

@@ -30,6 +30,10 @@ class UserMethods:
return await self._call(self._sender, request, ordered=ordered)
async def _call(self: 'TelegramClient', sender, request, ordered=False, flood_sleep_threshold=None):
if self._loop is not None and self._loop != helpers.get_running_loop():
raise RuntimeError('The asyncio event loop must not change after connection (see the FAQ for details)')
# if the loop is None it will fail with a connection error later on
if flood_sleep_threshold is None:
flood_sleep_threshold = self.flood_sleep_threshold
requests = (request if utils.is_list_like(request) else (request,))