place offer runs off main thread

This commit is contained in:
woodser 2025-04-10 11:42:56 -04:00
parent f19ed19325
commit cecc92a297
No known key found for this signature in database
GPG Key ID: 55A10DD48ADEE5EF
2 changed files with 51 additions and 48 deletions

View File

@ -517,54 +517,54 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
String sourceOfferId,
TransactionResultHandler resultHandler,
ErrorMessageHandler errorMessageHandler) {
// check source offer and clone limit
OpenOffer sourceOffer = null;
if (sourceOfferId != null) {
// get source offer
Optional<OpenOffer> sourceOfferOptional = getOpenOffer(sourceOfferId);
if (!sourceOfferOptional.isPresent()) {
errorMessageHandler.handleErrorMessage("Source offer not found to clone, offerId=" + sourceOfferId);
return;
}
sourceOffer = sourceOfferOptional.get();
// check clone limit
int numClones = getOpenOfferGroup(sourceOffer.getGroupId()).size();
if (numClones >= Restrictions.MAX_OFFERS_WITH_SHARED_FUNDS) {
errorMessageHandler.handleErrorMessage("Cannot create offer because maximum number of " + Restrictions.MAX_OFFERS_WITH_SHARED_FUNDS + " cloned offers with shared funds reached.");
return;
}
}
// create open offer
OpenOffer openOffer = new OpenOffer(offer, triggerPrice, sourceOffer == null ? reserveExactAmount : sourceOffer.isReserveExactAmount());
// set state from source offer
if (sourceOffer != null) {
openOffer.setReserveTxHash(sourceOffer.getReserveTxHash());
openOffer.setReserveTxHex(sourceOffer.getReserveTxHex());
openOffer.setReserveTxKey(sourceOffer.getReserveTxKey());
openOffer.setGroupId(sourceOffer.getGroupId());
openOffer.getOffer().getOfferPayload().setReserveTxKeyImages(sourceOffer.getOffer().getOfferPayload().getReserveTxKeyImages());
xmrWalletService.cloneAddressEntries(sourceOffer.getOffer().getId(), openOffer.getOffer().getId());
if (hasConflictingClone(openOffer)) openOffer.setState(OpenOffer.State.DEACTIVATED);
}
// add the open offer
synchronized (processOffersLock) {
addOpenOffer(openOffer);
}
// done if source offer is pending
if (sourceOffer != null && sourceOffer.isPending()) {
resultHandler.handleResult(null);
return;
}
// schedule or post offer
ThreadUtils.execute(() -> {
// check source offer and clone limit
OpenOffer sourceOffer = null;
if (sourceOfferId != null) {
// get source offer
Optional<OpenOffer> sourceOfferOptional = getOpenOffer(sourceOfferId);
if (!sourceOfferOptional.isPresent()) {
errorMessageHandler.handleErrorMessage("Source offer not found to clone, offerId=" + sourceOfferId);
return;
}
sourceOffer = sourceOfferOptional.get();
// check clone limit
int numClones = getOpenOfferGroup(sourceOffer.getGroupId()).size();
if (numClones >= Restrictions.MAX_OFFERS_WITH_SHARED_FUNDS) {
errorMessageHandler.handleErrorMessage("Cannot create offer because maximum number of " + Restrictions.MAX_OFFERS_WITH_SHARED_FUNDS + " cloned offers with shared funds reached.");
return;
}
}
// create open offer
OpenOffer openOffer = new OpenOffer(offer, triggerPrice, sourceOffer == null ? reserveExactAmount : sourceOffer.isReserveExactAmount());
// set state from source offer
if (sourceOffer != null) {
openOffer.setReserveTxHash(sourceOffer.getReserveTxHash());
openOffer.setReserveTxHex(sourceOffer.getReserveTxHex());
openOffer.setReserveTxKey(sourceOffer.getReserveTxKey());
openOffer.setGroupId(sourceOffer.getGroupId());
openOffer.getOffer().getOfferPayload().setReserveTxKeyImages(sourceOffer.getOffer().getOfferPayload().getReserveTxKeyImages());
xmrWalletService.cloneAddressEntries(sourceOffer.getOffer().getId(), openOffer.getOffer().getId());
if (hasConflictingClone(openOffer)) openOffer.setState(OpenOffer.State.DEACTIVATED);
}
// add the open offer
synchronized (processOffersLock) {
addOpenOffer(openOffer);
}
// done if source offer is pending
if (sourceOffer != null && sourceOffer.isPending()) {
resultHandler.handleResult(null);
return;
}
// schedule or post offer
synchronized (processOffersLock) {
CountDownLatch latch = new CountDownLatch(1);
processOffer(getOpenOffers(), openOffer, (transaction) -> {

View File

@ -2728,7 +2728,10 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
}
}
} catch (Exception e) {
if (HavenoUtils.isUnresponsive(e)) forceRestartTradeWallet();
if (HavenoUtils.isUnresponsive(e)) {
if (isShutDownStarted) forceCloseWallet();
else forceRestartTradeWallet();
}
else {
boolean isWalletConnected = isWalletConnectedToDaemon();
if (wallet != null && !isShutDownStarted && isWalletConnected) {