Thread (7 messages) flat view 7 messages, 2 authors, 2016-06-15

Re: [JGIT PATCH 2/2] Allow core.packedGitLimit to exceed "2 g"

From: Shawn O. Pearce <hidden>
Date: 2016-06-15 22:46:57

Ferry Huberts [off-list ref] wrote:
Shawn O. Pearce wrote:
quoted
A 64 bit JVM might actually be able to dedicate more than 2 GiB of
Please don't quote everything if you are only replying to a tiny
part.
quoted
 	private static int tableSize(final WindowCacheConfig cfg) {
 		final int wsz = cfg.getPackedGitWindowSize();
-		final int limit = cfg.getPackedGitLimit();
+		final long limit = cfg.getPackedGitLimit();
 		if (wsz <= 0)
 			throw new IllegalArgumentException("Invalid window size");
 		if (limit < wsz)
 			throw new IllegalArgumentException("Window size must be < limit");
-		return 5 * (limit / wsz) / 2;
+		return (int) Math.min(5 * (limit / wsz) / 2, 2000000000);
Math.min returns a long because the prototype Math.min(long,long) will
be chosen. The cast can then overflow and fail. Better change the return
type to a long:
+ return Math.min(5 * (limit / wsz) / 2, 2000000000L);
If you looked at that, 2,000,000,000 is within the range of an int.
We select the smallest value.  The first argument expression is
computed as a long, so we shouldn't ever overflow and cause the
first argument to be negative.  If the first argument is larger
than 2 billion, then it does risk overflow, but the 2nd argument
is smaller, so it is returned.

The code is fine as is.
 
-- 
Shawn.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help