From d8376ee50db23ffdd1400696277667502ce3fc31 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Sat, 10 Feb 2018 12:44:09 +0100 Subject: [PATCH] Add a lock around connection.recv() --- telethon/network/mtproto_sender.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/telethon/network/mtproto_sender.py b/telethon/network/mtproto_sender.py index 3a35eae4..5ab8e449 100644 --- a/telethon/network/mtproto_sender.py +++ b/telethon/network/mtproto_sender.py @@ -49,6 +49,7 @@ class MtProtoSender: self.session = session self.connection = connection self._loop = loop if loop else asyncio.get_event_loop() + self._recv_lock = asyncio.Lock() # Requests (as msg_id: Message) sent waiting to be received self._pending_receive = {} @@ -123,7 +124,10 @@ class MtProtoSender: Update and Updates objects. """ try: - body = await self.connection.recv() + with await self._recv_lock: + # Receiving items is not an "atomic" operation since we + # need to read the length and then upcoming parts separated. + body = await self.connection.recv() except (BufferError, InvalidChecksumError): # TODO BufferError, we should spot the cause... # "No more bytes left"; something wrong happened, clear