mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-13 02:35:52 +00:00
Use EventListenerInvoker in PeerGroup, and clear a FindBugs warning about an unlocked access to the running property.
This commit is contained in:
parent
b25446271a
commit
31463c506f
@ -19,6 +19,7 @@ package com.google.bitcoin.core;
|
|||||||
|
|
||||||
import com.google.bitcoin.discovery.PeerDiscovery;
|
import com.google.bitcoin.discovery.PeerDiscovery;
|
||||||
import com.google.bitcoin.discovery.PeerDiscoveryException;
|
import com.google.bitcoin.discovery.PeerDiscoveryException;
|
||||||
|
import com.google.bitcoin.utils.EventListenerInvoker;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -379,6 +380,10 @@ public class PeerGroup {
|
|||||||
return peers.size();
|
return peers.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized boolean isRunning() {
|
||||||
|
return running;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs various tasks for the peer group: connects to new nodes to keep the currently connected node count at
|
* Performs various tasks for the peer group: connects to new nodes to keep the currently connected node count at
|
||||||
* the right level, runs peer discovery if we run out, and broadcasts transactions that were submitted via
|
* the right level, runs peer discovery if we run out, and broadcasts transactions that were submitted via
|
||||||
@ -394,7 +399,7 @@ public class PeerGroup {
|
|||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
while (running) {
|
while (isRunning()) {
|
||||||
// Modify the peer group under its lock, always.
|
// Modify the peer group under its lock, always.
|
||||||
int numPeers;
|
int numPeers;
|
||||||
|
|
||||||
@ -619,7 +624,7 @@ public class PeerGroup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected synchronized void handleNewPeer(Peer peer) {
|
protected synchronized void handleNewPeer(final Peer peer) {
|
||||||
log.info("Handling new {}", peer);
|
log.info("Handling new {}", peer);
|
||||||
// If we want to download the chain, and we aren't currently doing so, do so now.
|
// If we want to download the chain, and we aren't currently doing so, do so now.
|
||||||
if (downloadListener != null && downloadPeer == null) {
|
if (downloadListener != null && downloadPeer == null) {
|
||||||
@ -635,13 +640,12 @@ public class PeerGroup {
|
|||||||
// which are relevant to us, and which we therefore wish to help propagate (ie they send us coins).
|
// which are relevant to us, and which we therefore wish to help propagate (ie they send us coins).
|
||||||
peer.addEventListener(getDataListener);
|
peer.addEventListener(getDataListener);
|
||||||
announcePendingWalletTransactions(wallets, Collections.singleton(peer));
|
announcePendingWalletTransactions(wallets, Collections.singleton(peer));
|
||||||
synchronized (peerEventListeners) {
|
EventListenerInvoker.invoke(peerEventListeners, new EventListenerInvoker<PeerEventListener>() {
|
||||||
for (PeerEventListener listener : peerEventListeners) {
|
@Override
|
||||||
synchronized (listener) {
|
public void invoke(PeerEventListener listener) {
|
||||||
listener.onPeerConnected(peer, peers.size());
|
listener.onPeerConnected(peer, peers.size());
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns true if at least one peer received an inv. */
|
/** Returns true if at least one peer received an inv. */
|
||||||
@ -700,7 +704,7 @@ public class PeerGroup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected synchronized void handlePeerDeath(Peer peer) {
|
protected synchronized void handlePeerDeath(final Peer peer) {
|
||||||
assert !peers.contains(peer);
|
assert !peers.contains(peer);
|
||||||
if (peer == downloadPeer) {
|
if (peer == downloadPeer) {
|
||||||
log.info("Download peer died. Picking a new one.");
|
log.info("Download peer died. Picking a new one.");
|
||||||
@ -717,13 +721,12 @@ public class PeerGroup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
peer.removeEventListener(getDataListener);
|
peer.removeEventListener(getDataListener);
|
||||||
synchronized (peerEventListeners) {
|
EventListenerInvoker.invoke(peerEventListeners, new EventListenerInvoker<PeerEventListener>() {
|
||||||
for (PeerEventListener listener : peerEventListeners) {
|
@Override
|
||||||
synchronized (listener) {
|
public void invoke(PeerEventListener listener) {
|
||||||
listener.onPeerDisconnected(peer, peers.size());
|
listener.onPeerDisconnected(peer, peers.size());
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void startBlockChainDownloadFromPeer(Peer peer) {
|
private synchronized void startBlockChainDownloadFromPeer(Peer peer) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user