diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java index 7874aa606d6ae9120f1b1999a45083b751c7576b..c41c41a4e360645e71021f2338ddcc60bbbb37c5 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java @@ -309,7 +309,7 @@ class HTTPResponseOutputStream extends FilterOutputStream { } catch (OutOfMemoryError oom) { _log.error("OOM in HTTP Decompressor", oom); } finally { - if (_log.shouldLog(Log.INFO) && (_in != null)) + if (_log.shouldInfo()) _log.info("After decompression, written=" + written + " read=" + _in.getTotalRead() + ", expanded=" + _in.getTotalExpanded() + ", remaining=" + _in.getRemaining() @@ -319,19 +319,20 @@ class HTTPResponseOutputStream extends FilterOutputStream { if (_out != null) try { _out.close(); } catch (IOException ioe) {} + try { + _in.close(); + } catch (IOException ioe) {} } - if (_in != null) { - double compressed = _in.getTotalRead(); - double expanded = _in.getTotalExpanded(); - ReusableGZIPInputStream.release(_in); - if (compressed > 0 && expanded > 0) { - // only update the stats if we did something - double ratio = compressed/expanded; - _context.statManager().addRateData("i2ptunnel.httpCompressionRatio", (int)(100d*ratio)); - _context.statManager().addRateData("i2ptunnel.httpCompressed", (long)compressed); - _context.statManager().addRateData("i2ptunnel.httpExpanded", (long)expanded); - } + double compressed = _in.getTotalRead(); + double expanded = _in.getTotalExpanded(); + ReusableGZIPInputStream.release(_in); + if (compressed > 0 && expanded > 0) { + // only update the stats if we did something + double ratio = compressed/expanded; + _context.statManager().addRateData("i2ptunnel.httpCompressionRatio", (int)(100d*ratio)); + _context.statManager().addRateData("i2ptunnel.httpCompressed", (long)compressed); + _context.statManager().addRateData("i2ptunnel.httpExpanded", (long)expanded); } } } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java index 8b322d45a04db3e78e564790c56c927c683ca1d2..621e11a294973b2f865f487f92fd5fd5adada674 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java @@ -1517,7 +1517,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging { if (tasks.isEmpty()) { System.exit(0); } - l.log("There are running tasks. Try 'list'."); + l.log("There are running tasks. Try 'list' or 'close all'."); //notifyEvent("quitResult", "error"); } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketFull.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketFull.java index 5d3bec526e9526d1c26aca23bd79bb2459d8a291..173190e8c0bd9534a3158ba25eacd1203e260bcc 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketFull.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketFull.java @@ -52,7 +52,7 @@ class I2PSocketFull implements I2PSocket { Connection c = _connection; if (c == null) return; if (log.shouldLog(Log.INFO)) - log.info("close() called, connected? " + c.getIsConnected() + " : " + c); + log.info("close() called, connected? " + c.getIsConnected() + " : " + c, new Exception()); if (c.getIsConnected()) { MessageInputStream in = c.getInputStream(); in.close(); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageInputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageInputStream.java index fdf3d397b1e1a0e584fd7b7692e834700293ffc3..3897b28093d7b739a78c9a3f2fe5053c6801a26e 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageInputStream.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageInputStream.java @@ -61,6 +61,9 @@ class MessageInputStream extends InputStream { private final int _maxBufferSize; private final byte[] _oneByte = new byte[1]; private final Object _dataLock; + + /** only in _notYetReadyBlocks, never in _readyDataBlocks */ + private static final ByteArray DUMMY_BA = new ByteArray(null); private static final int MIN_READY_BUFFERS = 16; @@ -320,9 +323,9 @@ class MessageInputStream extends InputStream { _highestReadyBlockId = messageId; long cur = _highestReadyBlockId + 1; // now pull in any previously pending blocks - while (_notYetReadyBlocks.containsKey(Long.valueOf(cur))) { - ByteArray ba = _notYetReadyBlocks.remove(Long.valueOf(cur)); - if ( (ba != null) && (ba.getData() != null) && (ba.getValid() > 0) ) { + ByteArray ba; + while ((ba = _notYetReadyBlocks.remove(Long.valueOf(cur))) != null) { + if (ba.getData() != null && ba.getValid() > 0) { _readyDataBlocks.add(ba); } @@ -336,13 +339,17 @@ class MessageInputStream extends InputStream { // Java throws a SocketTimeoutException. // We do neither. } else { - if (_log.shouldLog(Log.INFO)) - _log.info("Message is out of order: " + messageId); - // _notYetReadyBlocks size is limited in ConnectionPacketHandler. - if (_locallyClosed) // dont need the payload, just the msgId in order - _notYetReadyBlocks.put(Long.valueOf(messageId), new ByteArray(null)); - else + // _notYetReadyBlocks size is limited in canAccept() + if (_locallyClosed) { + if (_log.shouldInfo()) + _log.info("Message received on closed stream: " + messageId); + // dont need the payload, just the msgId in order + _notYetReadyBlocks.put(Long.valueOf(messageId), DUMMY_BA); + } else { + if (_log.shouldInfo()) + _log.info("Message is out of order: " + messageId); _notYetReadyBlocks.put(Long.valueOf(messageId), payload); + } } _dataLock.notifyAll(); }