tquery_short_channel_ids: use Event instead of Lock - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit f4b3d7627d99777d9c33758fe5874d1360cac1ab DIR parent d30e894aafd0118e73fc4b3bb205451e2d6d9182 HTML Author: ThomasV <thomasv@electrum.org> Date: Thu, 16 May 2019 11:47:55 +0200 query_short_channel_ids: use Event instead of Lock Diffstat: M electrum/lnpeer.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) --- DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py t@@ -58,7 +58,7 @@ class Peer(Logger): def __init__(self, lnworker: 'LNWorker', pubkey:bytes, transport: LNTransportBase): self.initialized = asyncio.Event() - self.querying_lock = asyncio.Lock() + self.querying = asyncio.Event() self.transport = transport self.pubkey = pubkey self.lnworker = lnworker t@@ -288,9 +288,7 @@ class Peer(Logger): if not todo: await asyncio.sleep(1) continue - await self.querying_lock.acquire() - self.logger.info(f'Querying {len(todo)} short_channel_ids') - self.query_short_channel_ids(todo) + await self.get_short_channel_ids(todo) async def get_channel_range(self): req_index = self.lnworker.first_block t@@ -373,6 +371,13 @@ class Peer(Logger): #self.logger.info(f"on_reply_channel_range. >>> first_block {first}, num_blocks {num}, num_ids {len(ids)}, complete {repr(payload['complete'])}") self.reply_channel_range.put_nowait((first, num, complete, ids)) + async def get_short_channel_ids(self, ids): + self.logger.info(f'Querying {len(ids)} short_channel_ids') + assert not self.querying.is_set() + self.query_short_channel_ids(ids) + await self.querying.wait() + self.querying.clear() + def query_short_channel_ids(self, ids, compressed=True): ids = sorted(ids) s = b''.join(ids) t@@ -396,7 +401,7 @@ class Peer(Logger): self.ping_if_required() def on_reply_short_channel_ids_end(self, payload): - self.querying_lock.release() + self.querying.set() def close_and_cleanup(self): try: