electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

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:
Melectrum/lnworker.py | 11+++++++----
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)