Skip to content

Commit c749af6

Browse files
committed
skip trade protocol message processing if shutting down
1 parent 4a624e5 commit c749af6

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

core/src/main/java/haveno/core/trade/Trade.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1271,6 +1271,8 @@ public void shutDown() {
12711271

12721272
// shut down trade threads
12731273
synchronized (this) {
1274+
isInitialized = false;
1275+
isShutDown = true;
12741276
List<Runnable> shutDownThreads = new ArrayList<>();
12751277
shutDownThreads.add(() -> ThreadUtils.shutDown(getId()));
12761278
shutDownThreads.add(() -> ThreadUtils.shutDown(getConnectionChangedThreadId()));
@@ -1305,8 +1307,6 @@ public void shutDown() {
13051307
}
13061308

13071309
// de-initialize
1308-
isInitialized = false;
1309-
isShutDown = true;
13101310
if (idlePayoutSyncer != null) {
13111311
xmrWalletService.removeWalletListener(idlePayoutSyncer);
13121312
idlePayoutSyncer = null;

core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java

+6
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,10 @@ public void handleDepositResponse(DepositResponse response, NodeAddress sender)
469469

470470
public void handle(DepositsConfirmedMessage response, NodeAddress sender) {
471471
System.out.println(getClass().getSimpleName() + ".handle(DepositsConfirmedMessage)");
472+
if (!trade.isInitialized() || trade.isShutDown()) return;
472473
ThreadUtils.execute(() -> {
473474
synchronized (trade) {
475+
if (!trade.isInitialized() || trade.isShutDown()) return;
474476
latchTrade();
475477
this.errorMessageHandler = null;
476478
expect(new Condition(trade)
@@ -496,6 +498,7 @@ public void handle(DepositsConfirmedMessage response, NodeAddress sender) {
496498
// received by seller and arbitrator
497499
protected void handle(PaymentSentMessage message, NodeAddress peer) {
498500
System.out.println(getClass().getSimpleName() + ".handle(PaymentSentMessage)");
501+
if (!trade.isInitialized() || trade.isShutDown()) return;
499502
if (!(trade instanceof SellerTrade || trade instanceof ArbitratorTrade)) {
500503
log.warn("Ignoring PaymentSentMessage since not seller or arbitrator");
501504
return;
@@ -507,6 +510,7 @@ protected void handle(PaymentSentMessage message, NodeAddress peer) {
507510
// TODO A better fix would be to add a listener for the wallet sync state and process
508511
// the mailbox msg once wallet is ready and trade state set.
509512
synchronized (trade) {
513+
if (!trade.isInitialized() || trade.isShutDown()) return;
510514
if (trade.getPhase().ordinal() >= Trade.Phase.PAYMENT_SENT.ordinal()) {
511515
log.warn("Received another PaymentSentMessage which was already processed, ACKing");
512516
handleTaskRunnerSuccess(peer, message);
@@ -548,12 +552,14 @@ protected void handle(PaymentReceivedMessage message, NodeAddress peer) {
548552

549553
private void handle(PaymentReceivedMessage message, NodeAddress peer, boolean reprocessOnError) {
550554
System.out.println(getClass().getSimpleName() + ".handle(PaymentReceivedMessage)");
555+
if (!trade.isInitialized() || trade.isShutDown()) return;
551556
ThreadUtils.execute(() -> {
552557
if (!(trade instanceof BuyerTrade || trade instanceof ArbitratorTrade)) {
553558
log.warn("Ignoring PaymentReceivedMessage since not buyer or arbitrator");
554559
return;
555560
}
556561
synchronized (trade) {
562+
if (!trade.isInitialized() || trade.isShutDown()) return;
557563
latchTrade();
558564
Validator.checkTradeId(processModel.getOfferId(), message);
559565
processModel.setTradeMessage(message);

0 commit comments

Comments
 (0)