diff --git a/core/src/main/java/com/google/bitcoin/core/MemoryPool.java b/core/src/main/java/com/google/bitcoin/core/MemoryPool.java index bb22917ea..533a10694 100644 --- a/core/src/main/java/com/google/bitcoin/core/MemoryPool.java +++ b/core/src/main/java/com/google/bitcoin/core/MemoryPool.java @@ -268,8 +268,8 @@ public class MemoryPool { private void markBroadcast(PeerAddress byPeer, Transaction tx) { checkState(lock.isHeldByCurrentThread()); final TransactionConfidence confidence = tx.getConfidence(); - confidence.markBroadcastBy(byPeer); - confidence.queueListeners(TransactionConfidence.Listener.ChangeReason.SEEN_PEERS); + if (confidence.markBroadcastBy(byPeer)) + confidence.queueListeners(TransactionConfidence.Listener.ChangeReason.SEEN_PEERS); } /** diff --git a/core/src/main/java/com/google/bitcoin/core/TransactionConfidence.java b/core/src/main/java/com/google/bitcoin/core/TransactionConfidence.java index f1df3a264..4d56d62ff 100644 --- a/core/src/main/java/com/google/bitcoin/core/TransactionConfidence.java +++ b/core/src/main/java/com/google/bitcoin/core/TransactionConfidence.java @@ -274,12 +274,13 @@ public class TransactionConfidence implements Serializable { * * @param address IP address of the peer, used as a proxy for identity. */ - public synchronized void markBroadcastBy(PeerAddress address) { + public synchronized boolean markBroadcastBy(PeerAddress address) { if (!broadcastBy.addIfAbsent(address)) - return; // Duplicate. + return false; // Duplicate. if (getConfidenceType() == ConfidenceType.UNKNOWN) { this.confidenceType = ConfidenceType.PENDING; } + return true; } /**