diff --git a/telethon/client/telegrambaseclient.py b/telethon/client/telegrambaseclient.py index cb3ddcab..2a5a41fa 100644 --- a/telethon/client/telegrambaseclient.py +++ b/telethon/client/telegrambaseclient.py @@ -196,6 +196,7 @@ class TelegramBaseClient(abc.ABC): # Some further state for subclasses self._event_builders = [] self._events_pending_resolve = [] + self._event_resolve_lock = asyncio.Lock() # Default parse mode self._parse_mode = markdown diff --git a/telethon/client/updates.py b/telethon/client/updates.py index d2e5dbde..72d63928 100644 --- a/telethon/client/updates.py +++ b/telethon/client/updates.py @@ -159,9 +159,14 @@ class UpdateMethods(UserMethods): async def _dispatch_update(self, update): if self._events_pending_resolve: - # TODO Add lock not to resolve them twice - for event in self._events_pending_resolve: - await event.resolve(self) + if self._event_resolve_lock.locked(): + async with self._event_resolve_lock: + pass + else: + async with self._event_resolve_lock: + for event in self._events_pending_resolve: + await event.resolve(self) + self._events_pending_resolve.clear() for builder, callback in self._event_builders: