diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index e61ee259..b8fd2aa8 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -824,6 +824,12 @@ public class Controller extends Thread { // Incoming transactions queue + private boolean incomingTransactionQueueContains(byte[] signature) { + synchronized (incomingTransactions) { + return incomingTransactions.stream().anyMatch(t -> Arrays.equals(t.getSignature(), signature)); + } + } + private void processIncomingTransactionsQueue() { if (this.incomingTransactions.size() == 0) { // Don't bother locking if there are no new transactions to process @@ -1599,6 +1605,12 @@ public class Controller extends Thread { continue; } + // Ignore if this transaction is in the queue + if (incomingTransactionQueueContains(signature)) { + LOGGER.trace(() -> String.format("Ignoring existing queued transaction %s from peer %s", Base58.encode(signature), peer)); + continue; + } + // Do we have it already? (Before requesting transaction data itself) if (repository.getTransactionRepository().exists(signature)) { LOGGER.trace(() -> String.format("Ignoring existing transaction %s from peer %s", Base58.encode(signature), peer));