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