From 854d81eae975f7d92ef1a8516d9dd5575ee945fd Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Mon, 14 Oct 2013 12:05:18 +0200 Subject: [PATCH] Don't run confidence listeners if we get duplicate invs from the same peer (can happen if we connect to the same peer IP multiple times). --- core/src/main/java/com/google/bitcoin/core/MemoryPool.java | 4 ++-- .../java/com/google/bitcoin/core/TransactionConfidence.java | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) 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; } /**