From d5ce9c0994cc88d1d418ad4154232bcc81e0f386 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Wed, 12 Apr 2023 16:09:37 +0200 Subject: [PATCH] qml: destroy qeswaphelper with SwapDialog and catch RuntimeErrors if qeswalhelper members are accessed after --- electrum/gui/qml/components/main.qml | 5 +++- electrum/gui/qml/qeswaphelper.py | 34 +++++++++++++++++----------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/electrum/gui/qml/components/main.qml b/electrum/gui/qml/components/main.qml index f7435574c..b00c3c88b 100644 --- a/electrum/gui/qml/components/main.qml +++ b/electrum/gui/qml/components/main.qml @@ -365,7 +365,10 @@ ApplicationWindow Component { id: swapDialog SwapDialog { - onClosed: destroy() + onClosed: { + swaphelper.destroy() + destroy() + } } } diff --git a/electrum/gui/qml/qeswaphelper.py b/electrum/gui/qml/qeswaphelper.py index c533e7389..6e45f6498 100644 --- a/electrum/gui/qml/qeswaphelper.py +++ b/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()