From 66c2e779ea98eb1be31cd9e78a8a23b30aac8fe1 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 18 Aug 2020 23:56:24 +0300 Subject: [PATCH] Add mutex for backfill method --- mautrix_telegram/portal/base.py | 2 ++ mautrix_telegram/portal/telegram.py | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/mautrix_telegram/portal/base.py b/mautrix_telegram/portal/base.py index 35421a8e..737cea56 100644 --- a/mautrix_telegram/portal/base.py +++ b/mautrix_telegram/portal/base.py @@ -96,6 +96,7 @@ class BasePortal(MautrixBasePortal, ABC): encrypted: bool deleted: bool backfill_lock: SimpleLock + backfill_method_lock: asyncio.Lock backfill_leave: Optional[Set[IntentAPI]] log: TraceLogger @@ -131,6 +132,7 @@ class BasePortal(MautrixBasePortal, ABC): self.log = self.base_log.getChild(self.tgid_log if self.tgid else self.mxid) self.backfill_lock = SimpleLock("Waiting for backfilling to finish before handling %s", log=self.log) + self.backfill_method_lock = asyncio.Lock() self.backfill_leave = None self.dedup = PortalDedup(self) diff --git a/mautrix_telegram/portal/telegram.py b/mautrix_telegram/portal/telegram.py index 091591a5..17ae91d5 100644 --- a/mautrix_telegram/portal/telegram.py +++ b/mautrix_telegram/portal/telegram.py @@ -441,6 +441,11 @@ class PortalTelegram(BasePortal, ABC): async def backfill(self, source: 'AbstractUser', is_initial: bool = False, limit: Optional[int] = None, last_id: Optional[int] = None) -> None: + async with self.backfill_method_lock: + await self._locked_backfill(source, is_initial, limit, last_id) + + async def _locked_backfill(self, source: 'AbstractUser', is_initial: bool = False, + limit: Optional[int] = None, last_id: Optional[int] = None) -> None: limit = limit or (config["bridge.backfill.initial_limit"] if is_initial else config["bridge.backfill.missed_limit"]) if limit == 0: