mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-13 10:45:51 +00:00
Don't run event listener twice if a peer announces twice.
This commit is contained in:
parent
750f469bd3
commit
95dec1a910
@ -270,9 +270,10 @@ public class TransactionConfidence implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* Called by a {@link Peer} when a transaction is pending and announced by a peer. The more peers announce the
|
* Called by a {@link Peer} when a transaction is pending and announced by a peer. The more peers announce the
|
||||||
* transaction, the more peers have validated it (assuming your internet connection is not being intercepted).
|
* transaction, the more peers have validated it (assuming your internet connection is not being intercepted).
|
||||||
* If confidence is currently unknown, sets it to {@link ConfidenceType#PENDING}.
|
* If confidence is currently unknown, sets it to {@link ConfidenceType#PENDING}. Does not run listeners.
|
||||||
*
|
*
|
||||||
* @param address IP address of the peer, used as a proxy for identity.
|
* @param address IP address of the peer, used as a proxy for identity.
|
||||||
|
* @return true if marked, false if this address was already seen (no-op)
|
||||||
*/
|
*/
|
||||||
public synchronized boolean markBroadcastBy(PeerAddress address) {
|
public synchronized boolean markBroadcastBy(PeerAddress address) {
|
||||||
if (!broadcastBy.addIfAbsent(address))
|
if (!broadcastBy.addIfAbsent(address))
|
||||||
|
@ -139,14 +139,16 @@ public class TxConfidenceTable {
|
|||||||
*/
|
*/
|
||||||
public TransactionConfidence seen(Sha256Hash hash, PeerAddress byPeer) {
|
public TransactionConfidence seen(Sha256Hash hash, PeerAddress byPeer) {
|
||||||
TransactionConfidence confidence;
|
TransactionConfidence confidence;
|
||||||
|
boolean fresh = false;
|
||||||
lock.lock();
|
lock.lock();
|
||||||
{
|
{
|
||||||
cleanTable();
|
cleanTable();
|
||||||
confidence = getOrCreate(hash);
|
confidence = getOrCreate(hash);
|
||||||
confidence.markBroadcastBy(byPeer);
|
fresh = confidence.markBroadcastBy(byPeer);
|
||||||
}
|
}
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
confidence.queueListeners(TransactionConfidence.Listener.ChangeReason.SEEN_PEERS);
|
if (fresh)
|
||||||
|
confidence.queueListeners(TransactionConfidence.Listener.ChangeReason.SEEN_PEERS);
|
||||||
return confidence;
|
return confidence;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,6 +69,22 @@ public class TxConfidenceTableTest {
|
|||||||
assertEquals(2, seen[0]);
|
assertEquals(2, seen[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void events() throws Exception {
|
||||||
|
final TransactionConfidence.Listener.ChangeReason[] run = new TransactionConfidence.Listener.ChangeReason[1];
|
||||||
|
tx1.getConfidence().addEventListener(new TransactionConfidence.Listener() {
|
||||||
|
@Override
|
||||||
|
public void onConfidenceChanged(TransactionConfidence confidence, ChangeReason reason) {
|
||||||
|
run[0] = reason;
|
||||||
|
}
|
||||||
|
}, Threading.SAME_THREAD);
|
||||||
|
table.seen(tx1.getHash(), address1);
|
||||||
|
assertEquals(TransactionConfidence.Listener.ChangeReason.SEEN_PEERS, run[0]);
|
||||||
|
run[0] = null;
|
||||||
|
table.seen(tx1.getHash(), address1);
|
||||||
|
assertNull(run[0]);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void invAndDownload() throws Exception {
|
public void invAndDownload() throws Exception {
|
||||||
// Base case: we see a transaction announced twice and then download it. The count is in the confidence object.
|
// Base case: we see a transaction announced twice and then download it. The count is in the confidence object.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user