1
0

Merge pull request #10062 from f321x/handle_qe_swap_task_exceptions

qml: catch exceptions in QESwapHelper transport_task
This commit is contained in:
ghost43
2025-07-31 15:41:09 +00:00
committed by GitHub

View File

@@ -12,7 +12,7 @@ from electrum.bitcoin import DummyAddress
from electrum.logging import get_logger
from electrum.transaction import PartialTxOutput, PartialTransaction
from electrum.util import (NotEnoughFunds, NoDynamicFeeEstimates, profiler, get_asyncio_loop, age,
wait_for2)
wait_for2, send_exception_to_crash_reporter)
from electrum.submarine_swaps import NostrTransport, SwapServerTransport, pubkey_to_rgb_color
from electrum.fee_policy import FeePolicy
@@ -24,6 +24,7 @@ from .qewallet import QEWallet
from .util import QtEventListener, qt_event_listener
if TYPE_CHECKING:
import concurrent.futures
from electrum.submarine_swaps import SwapOffer
@@ -200,7 +201,6 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
def on_destroy(self):
if self.transport_task is not None:
self.transport_task.cancel()
self.transport_task = None
self.unregister_callbacks()
walletChanged = pyqtSignal()
@@ -457,17 +457,19 @@ class QESwapHelper(AuthMixin, QObject, QtEventListener):
self.offersUpdated.emit()
await asyncio.sleep(1)
async def handle_swap_transport(transport: SwapServerTransport):
# ensures that swap_transport is always set None if transport closes
try:
await swap_transport_task(transport)
finally:
self.swap_transport = None
def transport_closed_cb(fut: 'concurrent.futures.Future'):
self.transport_task = None
if fut.cancelled():
return
exc = fut.exception()
if exc:
send_exception_to_crash_reporter(exc)
self.transport_task = asyncio.run_coroutine_threadsafe(
handle_swap_transport(swap_transport),
swap_transport_task(swap_transport),
get_asyncio_loop()
)
self.transport_task.add_done_callback(transport_closed_cb)
@pyqtSlot()
def npubSelectionCancelled(self):