From 290912c333fd73e065ac03d9cfd0a1bdad165775 Mon Sep 17 00:00:00 2001 From: woodser <woodser@protonmail.com> Date: Mon, 10 Jul 2023 15:27:58 -0400 Subject: [PATCH] synchronize on wallet during restart --- .../core/xmr/wallet/XmrWalletService.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java index 2abe6a8d..041db70a 100644 --- a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java +++ b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java @@ -840,8 +840,10 @@ public class XmrWalletService { if (wallet == null) maybeInitMainWallet(); else if (wallet instanceof MoneroWalletRpc && !StringUtils.equals(oldProxyUri, newProxyUri)) { log.info("Restarting main wallet since proxy URI has changed"); - closeMainWallet(true); - maybeInitMainWallet(); + synchronized (wallet) { + closeMainWallet(true); + maybeInitMainWallet(); + } } else { wallet.setDaemonConnection(connection); if (connection != null) { @@ -1126,19 +1128,29 @@ public class XmrWalletService { } public BigInteger getBalanceForSubaddress(int subaddressIndex) { - return wallet.getBalance(0, subaddressIndex); + synchronized (wallet) { + return wallet.getBalance(0, subaddressIndex); + } } public BigInteger getAvailableBalanceForSubaddress(int subaddressIndex) { - return wallet.getUnlockedBalance(0, subaddressIndex); + synchronized (wallet) { + return wallet.getUnlockedBalance(0, subaddressIndex); + } } public BigInteger getBalance() { - return wallet != null ? wallet.getBalance(0) : BigInteger.valueOf(0); + if (wallet == null) return BigInteger.valueOf(0); + synchronized (wallet) { + return wallet.getBalance(0); + } } public BigInteger getAvailableBalance() { - return wallet != null ? wallet.getUnlockedBalance(0) : BigInteger.valueOf(0); + if (wallet == null) return BigInteger.valueOf(0); + synchronized (wallet) { + return wallet.getUnlockedBalance(0); + } } public Stream<XmrAddressEntry> getAddressEntriesForAvailableBalanceStream() {