diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py index 40d4bb2e9..5cee7d33a 100644 --- a/electrum/exchange_rate.py +++ b/electrum/exchange_rate.py @@ -78,6 +78,9 @@ class ExchangeBase(Logger): self.logger.info(f"getting fx quotes for {ccy}") self.quotes = await self.get_rates(ccy) self.logger.info("received fx quotes") + except asyncio.CancelledError: + # CancelledError must be passed-through for cancellation to work + raise except BaseException as e: self.logger.info(f"failed fx quotes: {repr(e)}") self.quotes = {} diff --git a/electrum/network.py b/electrum/network.py index dd66209f4..6618f1e85 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -1169,8 +1169,8 @@ class Network(Logger): async with main_taskgroup as group: await group.spawn(self._maintain_sessions()) [await group.spawn(job) for job in self._jobs] - except Exception as e: - self.logger.exception('') + except BaseException as e: + self.logger.exception('main_taskgroup died.') raise e asyncio.run_coroutine_threadsafe(main(), self.asyncio_loop) diff --git a/electrum/util.py b/electrum/util.py index d2359076a..e161f498c 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -983,7 +983,9 @@ def ignore_exceptions(func): async def wrapper(*args, **kwargs): try: return await func(*args, **kwargs) - except BaseException as e: + except asyncio.CancelledError: + raise + except Exception as e: pass return wrapper