commit 8ee1f140d8a530e5cb41ff204aa09cfef149f0b4
parent f9a5f2e1835e8326d1d030a6e79bd148455ee6be
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:
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/electrum/interface.py b/electrum/interface.py
@@ -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