From 17d1f847bcf201fb452c7c9d950b0b1ee2f4e22c Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Thu, 11 May 2023 11:47:36 +0200 Subject: [PATCH] lib: on Windows unload the watchonly wallet before deleting it --- src/bitcoin/d/mod.rs | 2 +- src/lib.rs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/bitcoin/d/mod.rs b/src/bitcoin/d/mod.rs index ef468238..4bd6e0c9 100644 --- a/src/bitcoin/d/mod.rs +++ b/src/bitcoin/d/mod.rs @@ -446,7 +446,7 @@ impl BitcoinD { .collect() } - fn unload_wallet(&self, wallet_path: String) -> Option { + pub fn unload_wallet(&self, wallet_path: String) -> Option { self.make_node_request("unloadwallet", ¶ms!(Json::String(wallet_path),)) .get("warning") .expect("No 'warning' in 'unloadwallet' response?") diff --git a/src/lib.rs b/src/lib.rs index 0b73c008..88ae299f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -201,6 +201,7 @@ fn setup_sqlite( // Windows-specific utility to remove a leftover watchonly wallet within bitcoind's datadir. #[cfg(windows)] fn maybe_delete_watchonly_wallet( + bitcoind: &BitcoinD, bitcoind_cookie_path: &path::Path, bitcoin_net: miniscript::bitcoin::Network, wallet_name: &str, @@ -228,6 +229,12 @@ fn maybe_delete_watchonly_wallet( "Found a leftover watchonly wallet at '{}'. Deleting it.", wallet_path.as_path().to_string_lossy() ); + if let Some(warning) = bitcoind.unload_wallet(wallet_path.to_string_lossy().to_string()) { + log::warn!( + "Warning when unloading watchonly wallet on bitcoind: '{}'", + warning + ); + } fs::remove_dir_all(&wallet_path) .map_err(|e| StartupError::WindowsBitcoindWatchonlyDeletion(wallet_path, e))?; } else { @@ -275,6 +282,7 @@ fn setup_bitcoind( // any leftover Liana watchonly wallet from bitcoind's data dir. #[cfg(windows)] maybe_delete_watchonly_wallet( + &bitcoind, &bitcoind_config.cookie_path, config.bitcoin_config.network, wo_name,