Browse Source

qml: destroy qeswaphelper with SwapDialog and catch RuntimeErrors if qeswalhelper members are accessed after

master
Sander van Grieken 3 years ago
parent
commit
d5ce9c0994
  1. 5
      electrum/gui/qml/components/main.qml
  2. 16
      electrum/gui/qml/qeswaphelper.py

5
electrum/gui/qml/components/main.qml

@ -365,7 +365,10 @@ ApplicationWindow
Component { Component {
id: swapDialog id: swapDialog
SwapDialog { SwapDialog {
onClosed: destroy() onClosed: {
swaphelper.destroy()
destroy()
}
} }
} }

16
electrum/gui/qml/qeswaphelper.py

@ -359,12 +359,16 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
fut = asyncio.run_coroutine_threadsafe(coro, loop) fut = asyncio.run_coroutine_threadsafe(coro, loop)
self.swapStarted.emit() self.swapStarted.emit()
txid = fut.result() txid = fut.result()
try: # swaphelper might be destroyed at this point
self.swapSuccess.emit() self.swapSuccess.emit()
except RuntimeError:
pass
except Exception as e: except Exception as e:
try: # swaphelper might be destroyed at this point
self._logger.error(str(e)) self._logger.error(str(e))
self.swapFailed.emit(str(e)) self.swapFailed.emit(str(e))
finally: except RuntimeError:
self.deleteLater() pass
threading.Thread(target=swap_task, daemon=True).start() threading.Thread(target=swap_task, daemon=True).start()
@ -383,15 +387,19 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
fut = asyncio.run_coroutine_threadsafe(coro, loop) fut = asyncio.run_coroutine_threadsafe(coro, loop)
self.swapStarted.emit() self.swapStarted.emit()
success = fut.result() success = fut.result()
try: # swaphelper might be destroyed at this point
if success: if success:
self.swapSuccess.emit() self.swapSuccess.emit()
else: else:
self.swapFailed.emit('') self.swapFailed.emit('')
except RuntimeError:
pass
except Exception as e: except Exception as e:
try: # swaphelper might be destroyed at this point
self._logger.error(str(e)) self._logger.error(str(e))
self.swapFailed.emit(str(e)) self.swapFailed.emit(str(e))
finally: except RuntimeError:
self.deleteLater() pass
threading.Thread(target=swap_task, daemon=True).start() threading.Thread(target=swap_task, daemon=True).start()

Loading…
Cancel
Save