mirror of
https://github.com/boldsuck/haveno.git
synced 2024-12-22 20:19:21 +00:00
latch trade awaits trade initialization
This commit is contained in:
parent
4ec5339e5d
commit
a6d827c369
2 changed files with 13 additions and 2 deletions
|
@ -431,6 +431,7 @@ public abstract class Trade implements Tradable, Model {
|
|||
// Mutable
|
||||
@Getter
|
||||
transient private boolean isInitialized;
|
||||
transient private boolean isFullyInitialized;
|
||||
@Getter
|
||||
transient private boolean isShutDownStarted;
|
||||
@Getter
|
||||
|
@ -723,7 +724,10 @@ public abstract class Trade implements Tradable, Model {
|
|||
isInitialized = true;
|
||||
|
||||
// done if deposit not requested or payout unlocked
|
||||
if (!isDepositRequested() || isPayoutUnlocked()) return;
|
||||
if (!isDepositRequested() || isPayoutUnlocked()) {
|
||||
isFullyInitialized = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// open wallet or done if wallet does not exist
|
||||
if (walletExists()) getWallet();
|
||||
|
@ -732,6 +736,7 @@ public abstract class Trade implements Tradable, Model {
|
|||
if (payoutTx != null && payoutTx.getNumConfirmations() >= XmrWalletService.NUM_BLOCKS_UNLOCK) {
|
||||
log.warn("Payout state for {} {} is {} but payout is unlocked, updating state", getClass().getSimpleName(), getId(), getPayoutState());
|
||||
setPayoutStateUnlocked();
|
||||
isFullyInitialized = true;
|
||||
return;
|
||||
} else {
|
||||
log.warn("Missing trade wallet for {} {}, state={}, marked completed={}", getClass().getSimpleName(), getShortId(), getState(), isCompleted());
|
||||
|
@ -741,6 +746,11 @@ public abstract class Trade implements Tradable, Model {
|
|||
|
||||
// start polling if deposit requested
|
||||
if (isDepositRequested()) tryInitPolling();
|
||||
isFullyInitialized = true;
|
||||
}
|
||||
|
||||
public void awaitInitialized() {
|
||||
while (!isFullyInitialized) HavenoUtils.waitFor(100); // TODO: use proper notification and refactor isInitialized, fullyInitialized, and arbitrator idling
|
||||
}
|
||||
|
||||
public void requestPersistence() {
|
||||
|
@ -1203,6 +1213,7 @@ public abstract class Trade implements Tradable, Model {
|
|||
for (int i = 0; i < TradeProtocol.MAX_ATTEMPTS; i++) {
|
||||
try {
|
||||
wallet.submitMultisigTxHex(payoutTxHex);
|
||||
ThreadUtils.submitToPool(() -> pollWallet());
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
log.warn("Failed to submit payout tx, attempt={}/{}, tradeId={}, error={}", i + 1, TradeProtocol.MAX_ATTEMPTS, getShortId(), e.getMessage());
|
||||
|
@ -1211,7 +1222,6 @@ public abstract class Trade implements Tradable, Model {
|
|||
}
|
||||
}
|
||||
}
|
||||
pollWallet();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -848,6 +848,7 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
|
|||
}
|
||||
|
||||
protected void latchTrade() {
|
||||
trade.awaitInitialized();
|
||||
if (tradeLatch != null) throw new RuntimeException("Trade latch is not null. That should never happen.");
|
||||
if (trade.isShutDown()) throw new RuntimeException("Cannot latch trade " + trade.getId() + " for protocol because it's shut down");
|
||||
tradeLatch = new CountDownLatch(1);
|
||||
|
|
Loading…
Reference in a new issue