mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-02-09 16:10:51 +03:00
Unconditionally disconnect exported senders on user disconnect
Borrowed senders are not disconnected immediately, but after a while. If a borrow was used recently but the user requested the main client to disconnect, those borrows "shouldn't" disconnect because they were used recently. However, if the user requests a disconnect, they mean that EVERYTHING should be disconnected, even if the borrows are recent. This actually gets rid of warnings about send/recv tasks being destroyed, which partially addresses #1634. That issue may still have more causes though.
This commit is contained in:
parent
44aca29057
commit
1cd11391c4
|
@ -611,10 +611,16 @@ class TelegramBaseClient(abc.ABC):
|
||||||
# Also clean-up all exported senders because we're done with them
|
# Also clean-up all exported senders because we're done with them
|
||||||
async with self._borrow_sender_lock:
|
async with self._borrow_sender_lock:
|
||||||
for state, sender in self._borrowed_senders.values():
|
for state, sender in self._borrowed_senders.values():
|
||||||
if state.should_disconnect():
|
# Note that we're not checking for `state.should_disconnect()`.
|
||||||
# disconnect should never raise
|
# If the user wants to disconnect the client, ALL connections
|
||||||
|
# to Telegram (including exported senders) should be closed.
|
||||||
|
#
|
||||||
|
# Disconnect should never raise, so there's no try/except.
|
||||||
await sender.disconnect()
|
await sender.disconnect()
|
||||||
|
# Can't use `mark_disconnected` because it may be borrowed.
|
||||||
|
state._connected = False
|
||||||
|
|
||||||
|
# If any was borrowed
|
||||||
self._borrowed_senders.clear()
|
self._borrowed_senders.clear()
|
||||||
|
|
||||||
# trio's nurseries would handle this for us, but this is asyncio.
|
# trio's nurseries would handle this for us, but this is asyncio.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user