commit d477e3489f88c26ea633187647aea0606c01fdf0
parent 0f00f4f6554d2afc503b63b9510e9c864fc23111
Author: ThomasV <thomasv@electrum.org>
Date:   Sat,  8 Jun 2019 17:46:53 +0200
lnworker: fix reestablish_peer_for_given_channel by passing chan explicitly
Diffstat:
1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/electrum/lnworker.py b/electrum/lnworker.py
@@ -911,32 +911,34 @@ class LNWallet(LNWorker):
         self.network.trigger_callback('channels', self.wallet)
         self.network.trigger_callback('wallet_updated', self.wallet)
 
-    async def reestablish_peers_and_channels(self):
-        async def reestablish_peer_for_given_channel():
-            # try last good address first
-            peer = self.channel_db.get_last_good_address(chan.node_id)
-            if peer:
-                last_tried = self._last_tried_peer.get(peer, 0)
-                if last_tried + PEER_RETRY_INTERVAL_FOR_CHANNELS < now:
-                    await self._add_peer(peer.host, peer.port, peer.pubkey)
-                    return
-            # try random address for node_id
-            node_info = self.channel_db.nodes_get(chan.node_id)
-            if not node_info: return
-            addresses = self.channel_db.get_node_addresses(node_info)
-            if not addresses: return
-            adr_obj = random.choice(addresses)
-            host, port = adr_obj.host, adr_obj.port
-            peer = LNPeerAddr(host, port, chan.node_id)
+    async def reestablish_peer_for_given_channel(self, chan):
+        now = time.time()
+        # try last good address first
+        peer = self.channel_db.get_last_good_address(chan.node_id)
+        if peer:
             last_tried = self._last_tried_peer.get(peer, 0)
             if last_tried + PEER_RETRY_INTERVAL_FOR_CHANNELS < now:
-                await self._add_peer(host, port, chan.node_id)
+                await self._add_peer(peer.host, peer.port, peer.pubkey)
+                return
+        # try random address for node_id
+        node_info = self.channel_db.nodes_get(chan.node_id)
+        if not node_info:
+            return
+        addresses = self.channel_db.get_node_addresses(node_info)
+        if not addresses:
+            return
+        adr_obj = random.choice(addresses)
+        host, port = adr_obj.host, adr_obj.port
+        peer = LNPeerAddr(host, port, chan.node_id)
+        last_tried = self._last_tried_peer.get(peer, 0)
+        if last_tried + PEER_RETRY_INTERVAL_FOR_CHANNELS < now:
+            await self._add_peer(host, port, chan.node_id)
 
+    async def reestablish_peers_and_channels(self):
         while True:
             await asyncio.sleep(1)
             with self.lock:
                 channels = list(self.channels.values())
-            now = time.time()
             for chan in channels:
                 if chan.is_closed():
                     continue
@@ -948,7 +950,7 @@ class LNWallet(LNWorker):
                 if not chan.should_try_to_reestablish_peer():
                     continue
                 peer = self.peers.get(chan.node_id, None)
-                coro = peer.reestablish_channel(chan) if peer else reestablish_peer_for_given_channel()
+                coro = peer.reestablish_channel(chan) if peer else self.reestablish_peer_for_given_channel(chan)
                 await self.network.main_taskgroup.spawn(coro)
 
     def current_feerate_per_kw(self):