From b0e625907324a3117cf94f3f34744018e45bc9d5 Mon Sep 17 00:00:00 2001 From: catbref Date: Sat, 19 Mar 2022 13:19:29 +0000 Subject: [PATCH] Networking work-in-progress: De-register a peer's socket channel OP_READ interest op when producing a ChannelTask for that peer. This should prevent duplicate ChannelTasks for the same peer. Re-register OP_READ once node has read from peer's channel. --- src/main/java/org/qortal/network/Network.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/org/qortal/network/Network.java b/src/main/java/org/qortal/network/Network.java index 44960ccc..4b72e60e 100644 --- a/src/main/java/org/qortal/network/Network.java +++ b/src/main/java/org/qortal/network/Network.java @@ -596,6 +596,10 @@ public class Network { try { peer.readChannel(); + + LOGGER.trace("Thread {} re-registering OP_READ interestOps on channel: {}", + Thread.currentThread().getId(), socketChannel); + socketChannel.register(channelSelector, SelectionKey.OP_READ); } catch (IOException e) { if (e.getMessage() != null && e.getMessage().toLowerCase().contains("connection reset")) { peer.disconnect("Connection reset"); @@ -637,6 +641,12 @@ public class Network { if (channelIterator.hasNext()) { nextSelectionKey = channelIterator.next(); channelIterator.remove(); + + if (nextSelectionKey.isReadable()) { + LOGGER.trace("Thread {} clearing all interestOps on channel: {}", + Thread.currentThread().getId(), nextSelectionKey.channel()); + nextSelectionKey.interestOps(0); + } } else { nextSelectionKey = null; channelIterator = null; // Nothing to do so reset iterator to cause new select