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. 34
      electrum/gui/qml/qeswaphelper.py

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

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

34
electrum/gui/qml/qeswaphelper.py

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

Loading…
Cancel
Save