Fixed integer overflow DIRECTMEMORY-118
git-svn-id: https://svn.apache.org/repos/asf/directmemory/trunk@1421991 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java b/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java
index 98d4b9b..e322fc1 100644
--- a/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java
+++ b/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImpl.java
@@ -105,7 +105,7 @@
for ( Integer i : generateFreeSizesRange( totalSize ) )
{
- freePointers.put( Integer.valueOf( i ), new LinkedHashSet<LinkedByteBuffer>() );
+ freePointers.put( i, new LinkedHashSet<LinkedByteBuffer>() );
}
initFirstBuffer();
@@ -132,20 +132,20 @@
* @param totalSize
* @return a list of all size's level used by the allocator.
*/
- protected List<Integer> generateFreeSizesRange( final Integer totalSize )
+ protected List<Integer> generateFreeSizesRange( final long totalSize )
{
List<Integer> sizes = new ArrayList<Integer>();
- for ( int i = minSizeThreshold; i <= totalSize; i *= 8 )
+ for ( long i = minSizeThreshold; i <= totalSize; i *= 8 )
{
- sizes.add( Integer.valueOf( i ) );
+ sizes.add( (int) i );
}
// If totalSize < minSizeThreshold or totalSize is not a multiple of minSizeThreshold
// we force adding an element to the map
if ( sizes.isEmpty() || !sizes.contains( totalSize ) )
{
- sizes.add( totalSize );
+ sizes.add( (int) totalSize );
}
return sizes;
diff --git a/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java b/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java
index f5a1a18..5ecbf54 100644
--- a/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java
+++ b/directmemory-cache/src/test/java/org/apache/directmemory/memory/allocator/MergingByteBufferAllocatorImplTest.java
@@ -19,11 +19,16 @@
* under the License.
*/
+import static org.junit.Assert.assertNotNull;
+
import java.io.IOException;
import java.nio.BufferOverflowException;
import junit.framework.Assert;
+import org.apache.directmemory.DirectMemory;
+import org.apache.directmemory.cache.CacheService;
+import org.apache.directmemory.memory.MemoryManagerServiceImpl;
import org.apache.directmemory.memory.buffer.MemoryBuffer;
import org.junit.Test;
@@ -199,4 +204,18 @@
}
}
+ @Test
+ public void testJiraIssue118()
+ throws Exception
+ {
+ CacheService<String, Object> cacheService = new DirectMemory<String, Object>()
+ .setNumberOfBuffers(1)
+ .setInitialCapacity(1)
+ .setMemoryManager(new MemoryManagerServiceImpl<Object>(true))
+ .setSize(350 *(1024*1024))
+ .setConcurrencyLevel(1)
+ .newCacheService();
+ assertNotNull(cacheService);
+ }
+
}