From 07b86f39d9e3b0a094be6598bbc77ba2124214fd Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 5 Jan 2023 14:11:13 +0100 Subject: [PATCH] fix race in address synchronizer (follow-up 29a0560f98c85a7c804401d79e2d26119259eb93) --- electrum/synchronizer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index adb8d480f..48aa3db98 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -86,7 +86,6 @@ class SynchronizerBase(NetworkJobOnDefaultServer): def add(self, addr): if not is_address(addr): raise ValueError(f"invalid bitcoin address {addr}") self._adding_addrs.add(addr) # this lets is_up_to_date already know about addr - asyncio.run_coroutine_threadsafe(self._add_address(addr), self.asyncio_loop) async def _add_address(self, addr: str): try: @@ -261,6 +260,8 @@ class Synchronizer(SynchronizerBase): prev_uptodate = False while True: await asyncio.sleep(0.1) + for addr in self._adding_addrs.copy(): # copy set to ensure iterator stability + await self._add_address(addr) up_to_date = self.adb.is_up_to_date() # see if status changed if (up_to_date != prev_uptodate