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 {