commit 09c3e52e62d1bcc1ed46c7b48ecda2105c7ad50c
parent 53802ba3821e88b1d5ecd3e373041cbd0d7537db
Author: SomberNight <somber.night@protonmail.com>
Date: Mon, 8 Oct 2018 20:26:44 +0200
lnworker: fix race
sometimes a reestablished channel would not get marked "open"
Diffstat:
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/electrum/lnworker.py b/electrum/lnworker.py
@@ -3,9 +3,8 @@ import os
from decimal import Decimal
import random
import time
-from typing import Optional, Sequence, Tuple, List
+from typing import Optional, Sequence, Tuple, List, Dict
import threading
-from functools import partial
import socket
import dns.resolver
@@ -17,7 +16,7 @@ from . import bitcoin
from .keystore import BIP32_KeyStore
from .bitcoin import sha256, COIN
from .util import bh2u, bfh, PrintError, InvoiceError, resolve_dns_srv, is_ip_address
-from .lnbase import Peer, privkey_to_pubkey, aiosafe
+from .lnbase import Peer, aiosafe
from .lnaddr import lnencode, LnAddr, lndecode
from .ecc import der_sig_from_sig_string
from .lnhtlc import HTLCStateMachine
@@ -60,7 +59,7 @@ class LNWorker(PrintError):
self._last_tried_peer = {} # LNPeerAddr -> unix timestamp
self._add_peers_from_config()
# wait until we see confirmations
- self.network.register_callback(self.on_network_update, ['network_updated', 'verified', 'fee']) # thread safe
+ self.network.register_callback(self.on_network_update, ['wallet_updated', 'network_updated', 'verified', 'fee']) # thread safe
self.network.register_callback(self.on_channel_txo, ['channel_txo'])
asyncio.run_coroutine_threadsafe(self.network.main_taskgroup.spawn(self.main_loop()), self.network.asyncio_loop)
@@ -168,6 +167,10 @@ class LNWorker(PrintError):
with self.lock:
channels = list(self.channels.values())
addr_sync = self.network.lnwatcher.addr_sync
+ if event in ('verified', 'wallet_updated'):
+ wallet = args[0]
+ if wallet != addr_sync:
+ return
for chan in channels:
if chan.get_state() == "OPENING":
res, depth = self.save_short_chan_id(chan)