tfix #4026 - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 81666bf9ac8b42d0ac25415ee3815d899c8adda6 DIR parent e971bd849868122135012b836ece86aeb591efb7 HTML Author: SomberNight <somber.night@protonmail.com> Date: Mon, 5 Mar 2018 11:44:03 +0100 fix #4026 Diffstat: M lib/synchronizer.py | 6 ++++++ M lib/verifier.py | 5 ++++- M lib/wallet.py | 3 ++- 3 files changed, 12 insertions(+), 2 deletions(-) --- DIR diff --git a/lib/synchronizer.py b/lib/synchronizer.py t@@ -84,6 +84,8 @@ class Synchronizer(ThreadJob): return bh2u(hashlib.sha256(status.encode('ascii')).digest()) def on_address_status(self, response): + if self.wallet.synchronizer is None: + return # we have been killed, this was just an orphan callback params, result = self.parse_response(response) if not params: return t@@ -98,6 +100,8 @@ class Synchronizer(ThreadJob): self.requested_addrs.remove(addr) def on_address_history(self, response): + if self.wallet.synchronizer is None: + return # we have been killed, this was just an orphan callback params, result = self.parse_response(response) if not params: return t@@ -127,6 +131,8 @@ class Synchronizer(ThreadJob): self.requested_histories.pop(addr) def tx_response(self, response): + if self.wallet.synchronizer is None: + return # we have been killed, this was just an orphan callback params, result = self.parse_response(response) if not params: return DIR diff --git a/lib/verifier.py b/lib/verifier.py t@@ -65,6 +65,8 @@ class SPV(ThreadJob): self.undo_verifications() def verify_merkle(self, r): + if self.wallet.verifier is None: + return # we have been killed, this was just an orphan callback if r.get('error'): self.print_error('received an error:', r) return t@@ -95,7 +97,8 @@ class SPV(ThreadJob): self.print_error("verified %s" % tx_hash) self.wallet.add_verified_tx(tx_hash, (tx_height, header.get('timestamp'), pos)) - def hash_merkle_root(self, merkle_s, target_hash, pos): + @classmethod + def hash_merkle_root(cls, merkle_s, target_hash, pos): h = hash_decode(target_hash) for i in range(len(merkle_s)): item = merkle_s[i] DIR diff --git a/lib/wallet.py b/lib/wallet.py t@@ -912,7 +912,8 @@ class Abstract_Wallet(PrintError): # make tx local self.unverified_tx.pop(tx_hash, None) self.verified_tx.pop(tx_hash, None) - self.verifier.merkle_roots.pop(tx_hash, None) + if self.verifier: + self.verifier.merkle_roots.pop(tx_hash, None) # but remove completely if not is_mine if self.txi[tx_hash] == {}: # FIXME the test here should be for "not all is_mine"; cannot detect conflict in some cases