From 956e1e01edc3d27d124e405a8afd1c45334b0f33 Mon Sep 17 00:00:00 2001 From: pasta Date: Thu, 13 Aug 2026 14:02:43 -0500 Subject: [PATCH] fix(wallet): serialize mixing-only lock state --- src/wallet/wallet.cpp | 15 ++++++++------- src/wallet/wallet.h | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 1a073153ef81..6a941af05ca2 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3910,9 +3910,8 @@ bool CWallet::IsLocked(bool fForMixing) const if (!IsCrypted()) return false; - if(!fForMixing && fOnlyMixingAllowed) return true; - LOCK(cs_wallet); + if (!fForMixing && fOnlyMixingAllowed) return true; return vMasterKey.empty(); } @@ -3921,15 +3920,17 @@ bool CWallet::Lock(bool fAllowMixing) if (!IsCrypted()) return false; - if(!fAllowMixing) { + { LOCK(cs_wallet); - if (!vMasterKey.empty()) { - memory_cleanse(vMasterKey.data(), vMasterKey.size() * sizeof(decltype(vMasterKey)::value_type)); - vMasterKey.clear(); + if (!fAllowMixing) { + if (!vMasterKey.empty()) { + memory_cleanse(vMasterKey.data(), vMasterKey.size() * sizeof(decltype(vMasterKey)::value_type)); + vMasterKey.clear(); + } } + fOnlyMixingAllowed = fAllowMixing; } - fOnlyMixingAllowed = fAllowMixing; NotifyStatusChanged(this); return true; } diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index b336b3cef90d..059e7712c6c4 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -290,7 +290,7 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati CKeyingMaterial vMasterKey GUARDED_BY(cs_wallet); //! if fOnlyMixingAllowed is true, only mixing should be allowed in unlocked wallet - bool fOnlyMixingAllowed{false}; + bool fOnlyMixingAllowed GUARDED_BY(cs_wallet){false}; bool Unlock(const CKeyingMaterial& vMasterKeyIn, bool fForMixingOnly = false);