Stop Network Output Channel Sending Extra Bytes

This change re-introduce an optimization to the output channel
which ensures sending of data bytes only. This optimization
was broken when the big object change was introduced.

Change-Id: I896daf80deb23bcae5d5e934565cf5493ed828ba
Reviewed-on: https://asterix-gerrit.ics.uci.edu/581
Reviewed-by: Murtadha Hubail <hubailmor@gmail.com>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java b/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java
index 84307c2..ed4279d 100644
--- a/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java
+++ b/hyracks/hyracks-comm/src/main/java/org/apache/hyracks/comm/channels/NetworkOutputChannel.java
@@ -58,8 +58,7 @@
     @Override
     public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
         ByteBuffer destBuffer = null;
-        int startPos = 0;
-        do {
+        while (buffer.hasRemaining()) {
             synchronized (this) {
                 while (true) {
                     if (aborted) {
@@ -80,14 +79,16 @@
                     }
                 }
             }
-            buffer.position(startPos);
-            startPos = Math.min(startPos + destBuffer.capacity(), buffer.capacity());
-            buffer.limit(startPos);
             destBuffer.clear();
-            destBuffer.put(buffer);
+            if (destBuffer.capacity() < buffer.remaining()) {
+                destBuffer.put(buffer.array(), buffer.position(), destBuffer.capacity());
+                buffer.position(buffer.position() + destBuffer.capacity());
+            } else {
+                destBuffer.put(buffer);
+            }
             destBuffer.flip();
             ccb.getWriteInterface().getFullBufferAcceptor().accept(destBuffer);
-        } while (startPos < buffer.capacity());
+        }
     }
 
     @Override