Author: bperroud
Date: Fri Jan  6 21:22:03 2012
New Revision: 1228416

URL: http://svn.apache.org/viewvc?rev=1228416&view=rev
Log:
DIRECTMEMORY-58 : if ByteBuffer.limit is called before ByteBuffer.slice, the 
sliced buffer's capacity will be the limit. Enforce with tests

Modified:
    
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
    
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/AbstractOffHeapMemoryBufferTest.java
    
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/NIOTest.java

Modified: 
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java?rev=1228416&r1=1228415&r2=1228416&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
 (original)
+++ 
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
 Fri Jan  6 21:22:03 2012
@@ -290,10 +290,10 @@ public class OffHeapMemoryBufferImpl
         fresh.free = false;
         used.addAndGet( size );
         ByteBuffer buf = buffer.slice();
+        buf.limit( fresh.start + size );
         buf.position( fresh.start );
 
         fresh.directBuffer = buf.slice();
-        fresh.directBuffer.limit( size );
         fresh.clazz = ByteBuffer.class;
         pointers.add( fresh );
         return fresh;

Modified: 
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/AbstractOffHeapMemoryBufferTest.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/AbstractOffHeapMemoryBufferTest.java?rev=1228416&r1=1228415&r2=1228416&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/AbstractOffHeapMemoryBufferTest.java
 (original)
+++ 
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/AbstractOffHeapMemoryBufferTest.java
 Fri Jan  6 21:22:03 2012
@@ -410,19 +410,26 @@ public abstract class AbstractOffHeapMem
         Assert.assertNotNull( pointer3 );
         Assert.assertEquals( new String( payload3 ), new String( 
offHeapMemoryBuffer.retrieve( pointer3 ) ) );
 
-        final byte[] allocatedPayload1 = 
MemoryTestUtils.generateRandomPayload( 4 * SMALL_PAYLOAD_LENGTH );
+        final int size1 = 4 * SMALL_PAYLOAD_LENGTH;
+        final byte[] allocatedPayload1 = 
MemoryTestUtils.generateRandomPayload( size1 );
         final Pointer allocatedPointer1 = offHeapMemoryBuffer.allocate( 
allocatedPayload1.length, -1, -1 );
         Assert.assertNotNull( allocatedPointer1 );
         final ByteBuffer buffer1 = allocatedPointer1.directBuffer;
         Assert.assertNotNull( buffer1 );
+        Assert.assertEquals( 0, buffer1.position() );
+        Assert.assertEquals( size1, buffer1.limit() );
+        Assert.assertEquals( size1, buffer1.capacity() );
         buffer1.put( allocatedPayload1 );
         Assert.assertEquals( new String( allocatedPayload1 ), new String( 
offHeapMemoryBuffer.retrieve( allocatedPointer1 ) ) );
 
-        final byte[] allocatedPayload2 = 
MemoryTestUtils.generateRandomPayload( 2 * SMALL_PAYLOAD_LENGTH );
+        final int size2 = 2 * SMALL_PAYLOAD_LENGTH;
+        final byte[] allocatedPayload2 = 
MemoryTestUtils.generateRandomPayload( size2 );
         final Pointer allocatedPointer2 = offHeapMemoryBuffer.allocate( 
allocatedPayload2.length, -1, -1 );
         Assert.assertNotNull( allocatedPointer2 );
         final ByteBuffer buffer2 = allocatedPointer2.directBuffer;
         Assert.assertNotNull( buffer2 );
+        Assert.assertEquals( size2, buffer2.limit() );
+        Assert.assertEquals( size2, buffer2.capacity() );
         buffer2.put( allocatedPayload2 );
         Assert.assertEquals( new String( allocatedPayload2 ), new String( 
offHeapMemoryBuffer.retrieve( allocatedPointer2 ) ) );
 

Modified: 
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/NIOTest.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/NIOTest.java?rev=1228416&r1=1228415&r2=1228416&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/NIOTest.java
 (original)
+++ 
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/test/NIOTest.java
 Fri Jan  6 21:22:03 2012
@@ -75,6 +75,7 @@ public class NIOTest
         assertTrue( b.isDirect() );
         assertEquals( 0, b.position() );
         assertEquals( size, b.limit() );
+        assertEquals( size, b.capacity() );
 
         byte[] check = MemoryManager.retrieve( p );
 


Reply via email to