From cd6de83905cb5447bc4c76e5fc38f2595fec4e0d Mon Sep 17 00:00:00 2001 From: sixcooler Date: Tue, 23 Feb 2010 15:59:58 +0000 Subject: [PATCH] next try for for http://forum.yacy-websuche.de/viewtopic.php?f=5&t=2703 (reverted 6692) git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6694 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- .../net/yacy/kelondro/index/RowCollection.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/source/net/yacy/kelondro/index/RowCollection.java b/source/net/yacy/kelondro/index/RowCollection.java index b572dcf64..b4ea8a26d 100644 --- a/source/net/yacy/kelondro/index/RowCollection.java +++ b/source/net/yacy/kelondro/index/RowCollection.java @@ -208,11 +208,6 @@ public class RowCollection implements Iterable { return this.rowdef; } - protected final int maxIntFromLong(long val) { - if (val >= Integer.MAX_VALUE) return Integer.MAX_VALUE; - return (int) val; - } - protected final long neededSpaceForEnsuredSize(final int elements, final boolean forcegc) { assert elements > 0 : "elements = " + elements; final long needed = elements * rowdef.objectsize; @@ -220,21 +215,22 @@ public class RowCollection implements Iterable { assert needed > 0 : "needed = " + needed; long allocram = needed * growfactorLarge100 / 100L; assert allocram > 0 : "elements = " + elements + ", new = " + allocram; - if (MemoryControl.request(allocram, false)) return allocram; + if (allocram <= Integer.MAX_VALUE && MemoryControl.request(allocram, false)) return allocram; allocram = needed * growfactorSmall100 / 100L; assert allocram > 0 : "elements = " + elements + ", new = " + allocram; - if (MemoryControl.request(allocram, forcegc)) return allocram; + if (allocram <= Integer.MAX_VALUE && MemoryControl.request(allocram, forcegc)) return allocram; return needed; } protected final void ensureSize(final int elements) throws RowSpaceExceededException { if (elements == 0) return; - final int allocram = maxIntFromLong(neededSpaceForEnsuredSize(elements, true)); + final long allocram = neededSpaceForEnsuredSize(elements, true); if (allocram == 0) return; assert allocram > chunkcache.length : "wrong alloc computation: allocram = " + allocram + ", chunkcache.length = " + chunkcache.length; - if (!MemoryControl.request(allocram, true)) throw new RowSpaceExceededException(allocram, "RowCollection grow"); + if (allocram > Integer.MAX_VALUE || !MemoryControl.request(allocram, true)) + throw new RowSpaceExceededException(allocram, "RowCollection grow"); try { - final byte[] newChunkcache = new byte[allocram]; // increase space + final byte[] newChunkcache = new byte[(int) allocram]; // increase space System.arraycopy(chunkcache, 0, newChunkcache, 0, chunkcache.length); chunkcache = newChunkcache; } catch (OutOfMemoryError e) {