diff --git a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java index 43268a817..fc7b8de17 100644 --- a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java +++ b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java @@ -713,7 +713,8 @@ public class EstablishmentManager { break; } else { if (_log.shouldLog(Log.WARN)) - _log.warn("why are we confirmed with no identity? " + inboundState); + _log.warn("confirmed with invalid? " + inboundState); + inboundState.fail(); break; } case InboundEstablishState.STATE_FAILED: diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java index 696718f65..76024fcd3 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java @@ -201,19 +201,26 @@ public class OutboundMessageFragments { */ private void finishMessages() { int rv = 0; + List peers = new ArrayList(); synchronized (_activePeers) { + peers = new ArrayList(_activePeers); for (int i = 0; i < _activePeers.size(); i++) { PeerState state = (PeerState)_activePeers.get(i); - int remaining = state.finishMessages(); - if (remaining <= 0) { + if (state.getOutboundMessageCount() <= 0) { _activePeers.remove(i); - if (_log.shouldLog(Log.DEBUG)) - _log.debug("No more pending messages for " + state.getRemotePeer().toBase64()); i--; } - rv += remaining; } } + for (int i = 0; i < peers.size(); i++) { + PeerState state = (PeerState)peers.get(i); + int remaining = state.finishMessages(); + if (remaining <= 0) { + if (_log.shouldLog(Log.DEBUG)) + _log.debug("No more pending messages for " + state.getRemotePeer().toBase64()); + } + rv += remaining; + } } private long _lastCycleTime = System.currentTimeMillis(); @@ -231,7 +238,7 @@ public class OutboundMessageFragments { while (_alive && (state == null) ) { long now = _context.clock().now(); int nextSendDelay = -1; - finishMessages(); + //finishMessages(); try { synchronized (_activePeers) { for (int i = 0; i < _activePeers.size(); i++) { diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState.java b/router/java/src/net/i2p/router/transport/udp/PeerState.java index 22abbe224..ab75feefc 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState.java @@ -997,6 +997,18 @@ public class PeerState { } } + public int getOutboundMessageCount() { + Map msgs = _outboundMessages; + if (_dead) return 0; + if (msgs != null) { + synchronized (msgs) { + return msgs.size(); + } + } else { + return 0; + } + } + /** * Expire / complete any outbound messages * @return number of active outbound messages remaining diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index cc50b01bb..0e21331b5 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -808,7 +808,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } void rebuildExternalAddress() { rebuildExternalAddress(true); } - void rebuildExternalAddress(boolean allowuterInfo) { + void rebuildExternalAddress(boolean allowRebuildRouterInfo) { if (_context.router().isHidden()) return;