From 32a2be53c4a81539414fc5b2731662e87a570a6b Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Fri, 2 Mar 2012 15:15:36 +0100 Subject: [PATCH] Make adding/removing event listeners lock PeerGroup. Take out use of synchronizedList as it's redundant. Resolves issue 148. --- src/com/google/bitcoin/core/PeerGroup.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/google/bitcoin/core/PeerGroup.java b/src/com/google/bitcoin/core/PeerGroup.java index 77885d98..2badd383 100644 --- a/src/com/google/bitcoin/core/PeerGroup.java +++ b/src/com/google/bitcoin/core/PeerGroup.java @@ -121,7 +121,7 @@ public class PeerGroup { // peerEventListeners get a subset of events seen by the group. We add our own internal listener to this so // when we download a transaction, we can distribute it to each Peer in the pool so they can update the // transactions confidence level if they've seen it be announced/when they see it be announced. - peerEventListeners = Collections.synchronizedList(new ArrayList()); + peerEventListeners = new ArrayList(); addEventListener(new AbstractPeerEventListener() { @Override public void onTransaction(Peer peer, Transaction t) { @@ -224,13 +224,13 @@ public class PeerGroup { *

The listener will be locked during callback execution, which in turn will cause network message processing * to stop until the listener returns.

*/ - public void addEventListener(PeerEventListener listener) { + public synchronized void addEventListener(PeerEventListener listener) { assert listener != null; peerEventListeners.add(listener); } /** The given event listener will no longer be called with events. */ - public boolean removeEventListener(PeerEventListener listener) { + public synchronized boolean removeEventListener(PeerEventListener listener) { return peerEventListeners.remove(listener); } @@ -569,7 +569,7 @@ public class PeerGroup { needHandleDeath = peers.remove(peer); } - // This is unsynchronized since it can take awhile + // This is unsynchronized since it can take a while. if (needHandleDeath) handlePeerDeath(peer);