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 );