From c6a0cf138f2a2404da6428abe556103029f2c8fe Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Tue, 8 Apr 2025 09:19:40 -0400 Subject: [PATCH] remove trade lock while shutting down trade thread --- .../main/java/haveno/core/trade/Trade.java | 14 +++--- .../trade/protocol/BuyerAsMakerProtocol.java | 46 +++++++++---------- .../haveno/core/xmr/wallet/XmrWalletBase.java | 6 ++- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/haveno/core/trade/Trade.java b/core/src/main/java/haveno/core/trade/Trade.java index 760499aff7..1a0b513e1e 100644 --- a/core/src/main/java/haveno/core/trade/Trade.java +++ b/core/src/main/java/haveno/core/trade/Trade.java @@ -1607,13 +1607,11 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model { } // shut down trade threads - synchronized (getLock()) { - isInitialized = false; - isShutDown = true; - List shutDownThreads = new ArrayList<>(); - shutDownThreads.add(() -> ThreadUtils.shutDown(getId())); - ThreadUtils.awaitTasks(shutDownThreads); - } + isInitialized = false; + isShutDown = true; + List shutDownThreads = new ArrayList<>(); + shutDownThreads.add(() -> ThreadUtils.shutDown(getId())); + ThreadUtils.awaitTasks(shutDownThreads); // save and close if (wallet != null) { @@ -2513,7 +2511,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model { try { syncWallet(pollWallet); } catch (Exception e) { - if (!isShutDown && walletExists()) { + if (!isShutDownStarted && walletExists()) { log.warn("Error syncing trade wallet for {} {}: {}", getClass().getSimpleName(), getId(), e.getMessage()); } } diff --git a/core/src/main/java/haveno/core/trade/protocol/BuyerAsMakerProtocol.java b/core/src/main/java/haveno/core/trade/protocol/BuyerAsMakerProtocol.java index 9dc1b64405..4d29a8fb42 100644 --- a/core/src/main/java/haveno/core/trade/protocol/BuyerAsMakerProtocol.java +++ b/core/src/main/java/haveno/core/trade/protocol/BuyerAsMakerProtocol.java @@ -62,28 +62,28 @@ public class BuyerAsMakerProtocol extends BuyerProtocol implements MakerProtocol ErrorMessageHandler errorMessageHandler) { log.info(TradeProtocol.LOG_HIGHLIGHT + "handleInitTradeRequest() for {} {} from {}", trade.getClass().getSimpleName(), trade.getShortId(), peer); ThreadUtils.execute(() -> { - synchronized (trade.getLock()) { - latchTrade(); - this.errorMessageHandler = errorMessageHandler; - expect(phase(Trade.Phase.INIT) - .with(message) - .from(peer)) - .setup(tasks( - ApplyFilter.class, - ProcessInitTradeRequest.class, - MakerSendInitTradeRequestToArbitrator.class) - .using(new TradeTaskRunner(trade, - () -> { - startTimeout(); - handleTaskRunnerSuccess(peer, message); - }, - errorMessage -> { - handleTaskRunnerFault(peer, message, errorMessage); - })) - .withTimeout(TRADE_STEP_TIMEOUT_SECONDS)) - .executeTasks(true); - awaitTradeLatch(); - } - }, trade.getId()); + synchronized (trade.getLock()) { + latchTrade(); + this.errorMessageHandler = errorMessageHandler; + expect(phase(Trade.Phase.INIT) + .with(message) + .from(peer)) + .setup(tasks( + ApplyFilter.class, + ProcessInitTradeRequest.class, + MakerSendInitTradeRequestToArbitrator.class) + .using(new TradeTaskRunner(trade, + () -> { + startTimeout(); + handleTaskRunnerSuccess(peer, message); + }, + errorMessage -> { + handleTaskRunnerFault(peer, message, errorMessage); + })) + .withTimeout(TRADE_STEP_TIMEOUT_SECONDS)) + .executeTasks(true); + awaitTradeLatch(); + } + }, trade.getId()); } } diff --git a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletBase.java b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletBase.java index 3f4ba3aa03..6ad5a7180e 100644 --- a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletBase.java +++ b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletBase.java @@ -110,8 +110,10 @@ public abstract class XmrWalletBase { try { height = wallet.getHeight(); // can get read timeout while syncing } catch (Exception e) { - log.warn("Error getting wallet height while syncing with progress: " + e.getMessage()); - if (wallet != null && !isShutDownStarted) log.warn(ExceptionUtils.getStackTrace(e)); + if (wallet != null && !isShutDownStarted) { + log.warn("Error getting wallet height while syncing with progress: " + e.getMessage()); + log.warn(ExceptionUtils.getStackTrace(e)); + } // stop polling and release latch syncProgressError = e;