HttpCore 5.0-alpha2 RC1 tag
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/5.0-alpha2-RC1@1774888 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java
index 3ce12b6..bd83d15 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java
@@ -203,7 +203,9 @@
}
public final void onInput() throws HttpException, IOException {
- do {
+ while (connState.compareTo(ConnectionState.SHUTDOWN) < 0) {
+ int totalBytesRead = 0;
+ int messagesReceived = 0;
if (incomingMessage == null) {
if (connState.compareTo(ConnectionState.GRACEFUL_SHUTDOWN) >= 0 && inputIdle()) {
@@ -215,10 +217,12 @@
do {
bytesRead = inbuf.fill(ioSession.channel());
if (bytesRead > 0) {
+ totalBytesRead += bytesRead;
inTransportMetrics.incrementBytesTransferred(bytesRead);
}
final IncomingMessage messageHead = incomingMessageParser.parse(inbuf, bytesRead == -1);
if (messageHead != null) {
+ messagesReceived++;
incomingMessageParser.reset();
this.version = messageHead.getVersion();
@@ -249,16 +253,19 @@
if (incomingMessage != null) {
final ContentDecoder contentDecoder = incomingMessage.getBody();
final int bytesRead = consumeData(contentDecoder);
+ if (bytesRead > 0) {
+ totalBytesRead += bytesRead;
+ }
if (contentDecoder.isCompleted()) {
incomingMessage = null;
inputEnd();
ioSession.setEvent(SelectionKey.OP_READ);
}
- if (bytesRead == 0) {
- break;
- }
}
- } while (connState.compareTo(ConnectionState.SHUTDOWN) < 0 && inbuf.hasData());
+ if (totalBytesRead == 0 && messagesReceived == 0) {
+ break;
+ }
+ }
}
public final void onOutput() throws IOException, HttpException {