diff --git a/electrum/commands.py b/electrum/commands.py index d2481318a..933415cde 100644 --- a/electrum/commands.py +++ b/electrum/commands.py @@ -236,7 +236,7 @@ class Commands: @command('n') async def close_wallet(self, wallet_path=None): """Close wallet""" - return self.daemon.stop_wallet(wallet_path) + return await self.daemon._stop_wallet(wallet_path) @command('') async def create(self, passphrase=None, password=None, encrypt_file=True, seed_type=None, wallet_path=None): diff --git a/electrum/daemon.py b/electrum/daemon.py index 0678a400e..b4ccf3aac 100644 --- a/electrum/daemon.py +++ b/electrum/daemon.py @@ -521,13 +521,18 @@ class Daemon(Logger): return False def stop_wallet(self, path: str) -> bool: + """Returns True iff a wallet was found.""" + # note: this must not be called from the event loop. # TODO raise if so + fut = asyncio.run_coroutine_threadsafe(self._stop_wallet(path), self.asyncio_loop) + return fut.result() + + async def _stop_wallet(self, path: str) -> bool: """Returns True iff a wallet was found.""" path = standardize_path(path) wallet = self._wallets.pop(path, None) if not wallet: return False - fut = asyncio.run_coroutine_threadsafe(wallet.stop(), self.asyncio_loop) - fut.result() + await wallet.stop() return True def run_daemon(self):