tinterface: split run_fetch_blocks - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 8ee1f140d8a530e5cb41ff204aa09cfef149f0b4 DIR parent f9a5f2e1835e8326d1d030a6e79bd148455ee6be HTML Author: SomberNight <somber.night@protonmail.com> Date: Wed, 19 Sep 2018 20:30:54 +0200 interface: split run_fetch_blocks The 'continue' in the middle was too easy to miss. We want a 'network_updated' trigger from every interface, not just the fastest. Diffstat: M electrum/interface.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) --- DIR diff --git a/electrum/interface.py b/electrum/interface.py t@@ -385,18 +385,22 @@ class Interface(PrintError): if self.tip < constants.net.max_checkpoint(): raise GracefulDisconnect('server tip below max checkpoint') self.mark_ready() - async with self.network.bhi_lock: - if self.blockchain.height() >= height and self.blockchain.check_header(header): - # another interface amended the blockchain - self.print_error("skipping header", height) - continue - _, height = await self.step(height, header) - # in the simple case, height == self.tip+1 - if height <= self.tip: - await self.sync_until(height) + await self._process_header_at_tip() self.network.trigger_callback('network_updated') self.network.switch_lagging_interface() + async def _process_header_at_tip(self): + height, header = self.tip, self.tip_header + async with self.network.bhi_lock: + if self.blockchain.height() >= height and self.blockchain.check_header(header): + # another interface amended the blockchain + self.print_error("skipping header", height) + return + _, height = await self.step(height, header) + # in the simple case, height == self.tip+1 + if height <= self.tip: + await self.sync_until(height) + async def sync_until(self, height, next_height=None): if next_height is None: next_height = self.tip