URI: 
       tlnworker.pay: run path finding in sep. thread (don't block evt loop) - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit b6cb983733e6ae39211e0dfa1687b21642757292
   DIR parent df5acd1ea5f3dfc781d4ae91ef3860ff634d8a68
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Tue, 10 Mar 2020 17:56:11 +0100
       
       lnworker.pay: run path finding in sep. thread (don't block evt loop)
       
       Diffstat:
         M electrum/lnrouter.py                |       3 ---
         M electrum/lnworker.py                |       7 +++----
       
       2 files changed, 3 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/electrum/lnrouter.py b/electrum/lnrouter.py
       t@@ -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)...
        
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -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)