Browse Source

commands: fix "close_wallet" cmd, which was deadlocking

fixes #7348
patch-4
SomberNight 4 years ago
parent
commit
66f68d6b1f
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/commands.py
  2. 9
      electrum/daemon.py

2
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):

9
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):

Loading…
Cancel
Save