Author: rgodfrey
Date: Fri Aug 28 10:33:01 2015
New Revision: 1698296

URL: http://svn.apache.org/r1698296
Log:
QPID-6662 : Fix to [r1698241|http://svn.apache.org/r1698241] handling of 
allocation of buffers

Modified:
    
qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java

Modified: 
qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java?rev=1698296&r1=1698295&r2=1698296&view=diff
==============================================================================
--- 
qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java
 (original)
+++ 
qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java
 Fri Aug 28 10:33:01 2015
@@ -505,32 +505,29 @@ public final class QpidByteBuffer
         }
         else
         {
-            List<QpidByteBuffer> collections = new ArrayList<>((size / 
maxPooledBufferSize)+2);
+            List<QpidByteBuffer> buffers = new ArrayList<>((size / 
maxPooledBufferSize)+2);
             int remaining = size;
 
             QpidByteBuffer buf = _cachedBuffer.get();
-            if(buf != null)
+            if(buf == null)
             {
-                collections.add(buf.slice());
-                remaining -= buf.remaining();
-                buf.dispose();
+                buf = allocateDirect(maxPooledBufferSize);
             }
-            while(remaining > maxPooledBufferSize)
+            while(remaining > buf.remaining())
             {
-                collections.add(allocateDirect(maxPooledBufferSize));
-                remaining -= maxPooledBufferSize;
+                buffers.add(buf);
+                remaining -= buf.remaining();
+                buf = allocateDirect(maxPooledBufferSize);
             }
-            buf = allocateDirect(maxPooledBufferSize);
-            collections.add(buf.view(0, remaining));
-            buf.position(buf.position()+remaining);
+            buffers.add(buf.view(0, remaining));
+            buf.position(buf.position() + remaining);
 
-            _cachedBuffer.set(buf.slice());
+            _cachedBuffer.set(buf.hasRemaining() ? buf.slice() : 
allocateDirect(maxPooledBufferSize));
             buf.dispose();
-            return collections;
-
+            return buffers;
         }
-
     }
+
     public ByteBuffer asByteBuffer()
     {
         _ref.removeFromPool();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to