tinterface: try hard not to infinite loop while getting headers - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 3fc9326c4374af64eb9c294aa754df86adb22ba8 DIR parent da23e71db1f270c26ffbb217ca29f3df6649a315 HTML Author: SomberNight <somber.night@protonmail.com> Date: Sun, 16 Sep 2018 07:35:11 +0200 interface: try hard not to infinite loop while getting headers Diffstat: M electrum/interface.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- DIR diff --git a/electrum/interface.py b/electrum/interface.py t@@ -400,6 +400,7 @@ class Interface(PrintError): next_height = self.tip last = None while last is None or height <= next_height: + prev_last, prev_height = last, height if next_height > height + 10: could_connect, num_headers = await self.request_chunk(height, next_height) if not could_connect: t@@ -414,6 +415,7 @@ class Interface(PrintError): last = 'catchup' else: last, height = await self.step(height) + assert (prev_last, prev_height) != (last, height), 'had to prevent infinite loop in interface.sync_until' return last, height async def step(self, height, header=None): t@@ -422,7 +424,7 @@ class Interface(PrintError): if header is None: header = await self.get_block_header(height, 'catchup') chain = self.blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) - if chain: return 'catchup', height + if chain: return 'catchup', height+1 can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](height) if not can_connect: