diff --git a/router/java/src/net/i2p/router/transport/ntcp/Reader.java b/router/java/src/net/i2p/router/transport/ntcp/Reader.java index d16ea85b7da675e0a50a1e64e46a1fb334489c94..1e7746d212061d0c73f33666d24980b9757beffd 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/Reader.java +++ b/router/java/src/net/i2p/router/transport/ntcp/Reader.java @@ -98,8 +98,10 @@ class Reader { if (keepReading) { // keep on reading the same one } else { - _liveReads.remove(con); - con = null; + if (con != null) { + _liveReads.remove(con); + con = null; + } if (_pendingConnections.isEmpty()) { _pendingConnections.wait(); } else { @@ -116,6 +118,10 @@ class Reader { _log.debug("begin read for " + con); try { processRead(con); + } catch (IllegalStateException ise) { + // FailedEstablishState.receive() (race - see below) + if (_log.shouldWarn()) + _log.warn("Error in the ntcp reader", ise); } catch (RuntimeException re) { _log.log(Log.CRIT, "Error in the ntcp reader", re); } @@ -153,6 +159,7 @@ class Reader { EventPumper.releaseBuf(buf); break; } + // FIXME call est.isCorrupt() before also? throws ISE here... see above est.receive(buf); EventPumper.releaseBuf(buf); if (est.isCorrupt()) {