From 6620db41584dda4a6565ee80627c5b34d9f9c426 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Mon, 1 May 2023 15:49:39 +0000 Subject: [PATCH] mmgen-xmrwallet: force-kill wallet daemon on double Ctrl-C --- mmgen/daemon.py | 2 ++ mmgen/main_xmrwallet.py | 7 ++----- mmgen/proto/xmr/daemon.py | 1 + mmgen/xmrwallet.py | 7 ++++++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mmgen/daemon.py b/mmgen/daemon.py index c73fb577..010b9e72 100755 --- a/mmgen/daemon.py +++ b/mmgen/daemon.py @@ -194,6 +194,8 @@ class Daemon(Lockable): if self.state == 'ready': if not silent: msg(f'Stopping {self.desc} on port {self.bind_port}') + if self.force_kill: + run(['sync']) ret = self.run_cmd(self.stop_cmd,silent=True) if self.pids: diff --git a/mmgen/main_xmrwallet.py b/mmgen/main_xmrwallet.py index 7f887b36..6e4b1a40 100755 --- a/mmgen/main_xmrwallet.py +++ b/mmgen/main_xmrwallet.py @@ -163,8 +163,5 @@ if cfg.autosign and not cfg.test_suite: m = op_cls(cfg, xmrwallet_uargs(infile, wallets, spec)) -try: - if async_run(m.main()): - m.post_main() -except KeyboardInterrupt: - ymsg('\nUser interrupt') +if async_run(m.main()): + m.post_main() diff --git a/mmgen/proto/xmr/daemon.py b/mmgen/proto/xmr/daemon.py index 3565db03..48ac6b21 100755 --- a/mmgen/proto/xmr/daemon.py +++ b/mmgen/proto/xmr/daemon.py @@ -88,6 +88,7 @@ class MoneroWalletDaemon(RPCDaemon): new_console_mswin = True networks = ('mainnet','testnet') rpc_ports = _nw(13131, 13141, None) # testnet is non-standard + _reset_ok = ('debug','wait','pids','force_kill') def __init__( self, diff --git a/mmgen/xmrwallet.py b/mmgen/xmrwallet.py index a10bf113..099c484b 100755 --- a/mmgen/xmrwallet.py +++ b/mmgen/xmrwallet.py @@ -867,7 +867,12 @@ class MoneroWalletOps: async def stop_wallet_daemon(self): if not self.cfg.no_stop_wallet_daemon: - await self.c.stop_daemon() + try: + await self.c.stop_daemon() + except KeyboardInterrupt: + ymsg('\nForce killing wallet daemon') + self.c.daemon.force_kill = True + self.c.daemon.stop() def get_wallet_fn(self,data,watch_only=None): if watch_only is None: