diff --git a/core/src/main/java/ch/dissem/bitmessage/factory/BufferPool.java b/core/src/main/java/ch/dissem/bitmessage/factory/BufferPool.java index 1b977d7..65c1d34 100644 --- a/core/src/main/java/ch/dissem/bitmessage/factory/BufferPool.java +++ b/core/src/main/java/ch/dissem/bitmessage/factory/BufferPool.java @@ -47,14 +47,14 @@ class BufferPool { } public synchronized ByteBuffer allocate(int capacity) { - for (Map.Entry> e : pools.entrySet()) { - if (e.getKey() >= capacity && !e.getValue().isEmpty()) { - return e.getValue().pop(); - } - } Integer targetSize = getTargetSize(capacity); - LOG.debug("Creating new buffer of size " + targetSize); - return ByteBuffer.allocate(targetSize); + Stack pool = pools.get(targetSize); + if (pool.isEmpty()) { + LOG.trace("Creating new buffer of size " + targetSize); + return ByteBuffer.allocate(targetSize); + } else { + return pool.pop(); + } } /** @@ -64,21 +64,22 @@ class BufferPool { */ public synchronized ByteBuffer allocateHeaderBuffer() { Stack pool = pools.get(HEADER_SIZE); - if (!pool.isEmpty()) { - return pool.pop(); - } else { + if (pool.isEmpty()) { return ByteBuffer.allocate(HEADER_SIZE); + } else { + return pool.pop(); } } public synchronized void deallocate(ByteBuffer buffer) { buffer.clear(); - - if (!pools.keySet().contains(buffer.capacity())) { + Stack pool = pools.get(buffer.capacity()); + if (pool == null) { throw new IllegalArgumentException("Illegal buffer capacity " + buffer.capacity() + " one of " + pools.keySet() + " expected."); + } else { + pool.push(buffer); } - pools.get(buffer.capacity()).push(buffer); } private Integer getTargetSize(int capacity) { diff --git a/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java b/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java index 4a209aa..5d0f1c5 100644 --- a/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java +++ b/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java @@ -145,7 +145,7 @@ public abstract class AbstractConnection { updateIvCache(inv.getInventory()); List missing = ctx.getInventory().getMissing(inv.getInventory(), streams); missing.removeAll(commonRequestedObjects); - LOG.debug("Received inventory with " + originalSize + " elements, of which are " + LOG.trace("Received inventory with " + originalSize + " elements, of which are " + missing.size() + " missing."); send(new GetData.Builder().inventory(missing).build()); } diff --git a/networking/src/main/java/ch/dissem/bitmessage/networking/nio/ConnectionInfo.java b/networking/src/main/java/ch/dissem/bitmessage/networking/nio/ConnectionInfo.java index 8ba5b66..3e53eb4 100644 --- a/networking/src/main/java/ch/dissem/bitmessage/networking/nio/ConnectionInfo.java +++ b/networking/src/main/java/ch/dissem/bitmessage/networking/nio/ConnectionInfo.java @@ -135,6 +135,7 @@ public class ConnectionInfo extends AbstractConnection { reader.cleanup(); reader = null; } + payloadOut = null; } public boolean isSyncFinished() { diff --git a/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java b/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java index 0cb0af9..a17f378 100644 --- a/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java +++ b/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java @@ -239,8 +239,8 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex } e.getValue().cancel(); e.getValue().attach(null); - it.remove(); e.getKey().disconnect(); + it.remove(); } } try { @@ -387,12 +387,20 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex distribution.put(connection, new LinkedList()); } } + if (distribution.isEmpty()){ + return; + } InventoryVector next = iterator.next(); ConnectionInfo previous = null; do { for (ConnectionInfo connection : distribution.keySet()) { if (connection == previous || previous == null) { - next = iterator.next(); + if (iterator.hasNext()) { + previous = connection; + next = iterator.next(); + } else { + break; + } } if (connection.knowsOf(next)) { List ivs = distribution.get(connection); diff --git a/repositories/src/main/java/ch/dissem/bitmessage/repository/JdbcNodeRegistry.java b/repositories/src/main/java/ch/dissem/bitmessage/repository/JdbcNodeRegistry.java index 7374447..ae5c432 100644 --- a/repositories/src/main/java/ch/dissem/bitmessage/repository/JdbcNodeRegistry.java +++ b/repositories/src/main/java/ch/dissem/bitmessage/repository/JdbcNodeRegistry.java @@ -117,7 +117,7 @@ public class JdbcNodeRegistry extends JdbcHelper implements NodeRegistry { public void offerAddresses(List nodes) { cleanUp(); nodes.stream() - .filter(node -> node.getTime() < now(+24 * HOUR) && node.getTime() > now(-28 * DAY)) + .filter(node -> node.getTime() < now(+2 * MINUTE) && node.getTime() > now(-28 * DAY)) .forEach(node -> { synchronized (this) { NetworkAddress existing = loadExisting(node);