mirror of
https://github.com/Qortal/qortal.git
synced 2025-02-14 11:15:49 +00:00
EPC-fixes: Improve Network shutdown by exiting fast during broadcast and skipping callbacks during peer disconnect.
This commit is contained in:
parent
22aa5c41b5
commit
df3f16ccf1
@ -132,6 +132,8 @@ public class Network {
|
|||||||
private String ourExternalIpAddress = null;
|
private String ourExternalIpAddress = null;
|
||||||
private int ourExternalPort = Settings.getInstance().getListenPort();
|
private int ourExternalPort = Settings.getInstance().getListenPort();
|
||||||
|
|
||||||
|
private volatile boolean isShuttingDown = false;
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
private Network() {
|
private Network() {
|
||||||
@ -835,8 +837,6 @@ public class Network {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onDisconnect(Peer peer) {
|
public void onDisconnect(Peer peer) {
|
||||||
// Notify Controller
|
|
||||||
Controller.getInstance().onPeerDisconnect(peer);
|
|
||||||
if (peer.getConnectionEstablishedTime() > 0L) {
|
if (peer.getConnectionEstablishedTime() > 0L) {
|
||||||
LOGGER.debug("[{}] Disconnected from peer {}", peer.getPeerConnectionId(), peer);
|
LOGGER.debug("[{}] Disconnected from peer {}", peer.getPeerConnectionId(), peer);
|
||||||
} else {
|
} else {
|
||||||
@ -846,6 +846,10 @@ public class Network {
|
|||||||
this.removeConnectedPeer(peer);
|
this.removeConnectedPeer(peer);
|
||||||
this.channelsPendingWrite.remove(peer.getSocketChannel());
|
this.channelsPendingWrite.remove(peer.getSocketChannel());
|
||||||
|
|
||||||
|
if (this.isShuttingDown)
|
||||||
|
// No need to do any further processing, like re-enabling listen socket or notifying Controller
|
||||||
|
return;
|
||||||
|
|
||||||
if (getImmutableConnectedPeers().size() < maxPeers - 1
|
if (getImmutableConnectedPeers().size() < maxPeers - 1
|
||||||
&& serverSelectionKey.isValid()
|
&& serverSelectionKey.isValid()
|
||||||
&& (serverSelectionKey.interestOps() & SelectionKey.OP_ACCEPT) == 0) {
|
&& (serverSelectionKey.interestOps() & SelectionKey.OP_ACCEPT) == 0) {
|
||||||
@ -856,6 +860,9 @@ public class Network {
|
|||||||
LOGGER.error("Failed to re-enable accepting of incoming connections: {}", e.getMessage());
|
LOGGER.error("Failed to re-enable accepting of incoming connections: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Notify Controller
|
||||||
|
Controller.getInstance().onPeerDisconnect(peer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void peerMisbehaved(Peer peer) {
|
public void peerMisbehaved(Peer peer) {
|
||||||
@ -1454,6 +1461,9 @@ public class Network {
|
|||||||
|
|
||||||
public void broadcast(Function<Peer, Message> peerMessageBuilder) {
|
public void broadcast(Function<Peer, Message> peerMessageBuilder) {
|
||||||
for (Peer peer : getImmutableHandshakedPeers()) {
|
for (Peer peer : getImmutableHandshakedPeers()) {
|
||||||
|
if (this.isShuttingDown)
|
||||||
|
return;
|
||||||
|
|
||||||
Message message = peerMessageBuilder.apply(peer);
|
Message message = peerMessageBuilder.apply(peer);
|
||||||
|
|
||||||
if (message == null) {
|
if (message == null) {
|
||||||
@ -1469,6 +1479,8 @@ public class Network {
|
|||||||
// Shutdown
|
// Shutdown
|
||||||
|
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
|
this.isShuttingDown = true;
|
||||||
|
|
||||||
// Close listen socket to prevent more incoming connections
|
// Close listen socket to prevent more incoming connections
|
||||||
if (this.serverChannel.isOpen()) {
|
if (this.serverChannel.isOpen()) {
|
||||||
try {
|
try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user