Browse Source

disconnect from servers on exception

3.3.3.1
SomberNight 6 years ago
parent
commit
14a032a0b1
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/interface.py
  2. 18
      electrum/network.py

2
electrum/interface.py

@ -244,6 +244,8 @@ class BlockHeaderInterface(PrintError):
could_connect, num_headers = await self.conn.request_chunk(self.height, next_height)
self.tip = max(self.height + num_headers, self.tip)
if not could_connect:
if self.height <= self.iface.network.max_checkpoint():
raise Exception('server chain conflicts with checkpoints or genesis')
last = await self.step()
self.tip = max(self.height, self.tip)
continue

18
electrum/network.py

@ -809,14 +809,16 @@ class Network(PrintError):
asyncio.get_event_loop().create_task(self.new_interface(server))
remove = []
for k, i in self.interfaces.items():
if i.fut.done():
if i.exception:
try:
raise i.exception
except BaseException as e:
self.print_error(i.server, "errored because", str(e), str(type(e)))
else:
assert False, "interface future should not finish without exception"
if i.fut.done() and not i.exception:
assert False, "interface future should not finish without exception"
if i.exception:
if not i.fut.done():
try: i.fut.cancel()
except Exception as e: self.print_error('exception while cancelling fut', e)
try:
raise i.exception
except BaseException as e:
self.print_error(i.server, "errored because", str(e), str(type(e)))
remove.append(k)
changed = False
for k in remove:

Loading…
Cancel
Save