diff --git a/electrum/lnrouter.py b/electrum/lnrouter.py index 0ef28c71e..5fc2adef4 100644 --- a/electrum/lnrouter.py +++ b/electrum/lnrouter.py @@ -189,9 +189,6 @@ class LNPathFinder(Logger): if my_channels is None: my_channels = {} # note: we don't lock self.channel_db, so while the path finding runs, # the underlying graph could potentially change... (not good but maybe ~OK?) - # (but at the time of writing, we are called on the asyncio event loop, - # and the graph is also only updated from the event loop, so it will - # not change) # FIXME paths cannot be longer than 20 edges (onion packet)... diff --git a/electrum/lnworker.py b/electrum/lnworker.py index 2722f12e2..e6695a4a6 100644 --- a/electrum/lnworker.py +++ b/electrum/lnworker.py @@ -927,12 +927,11 @@ class LNWallet(LNWorker): reason = '' for i in range(attempts): try: - # note: this call does path-finding which takes ~1 second - # -> we will BLOCK the asyncio loop... (could just run in a thread and await, - # but then the graph could change while the path-finding runs on it) + # note: path-finding runs in a separate thread so that we don't block the asyncio loop + # graph updates might occur during the computation self.set_invoice_status(key, PR_ROUTING) self.network.trigger_callback('invoice_status', key) - route = self._create_route_from_invoice(decoded_invoice=lnaddr) + route = await run_in_thread(self._create_route_from_invoice, lnaddr) self.set_invoice_status(key, PR_INFLIGHT) self.network.trigger_callback('invoice_status', key) payment_attempt_log = await self._pay_to_route(route, lnaddr)