You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/08/28 12:33:02 UTC

svn commit: r1698296 - /qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java

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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org