1
0

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

This commit is contained in:
Sander van Grieken
2023-04-12 16:09:37 +02:00
parent d6403400bc
commit d5ce9c0994
2 changed files with 25 additions and 14 deletions

View File

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

View File

@@ -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()