Re: [JGIT PATCH 2/2] Allow core.packedGitLimit to exceed "2 g"
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Jun 13, 2009, 19:19 UTC
- Message-ID
- <20090613191943.GS16497@spearce.org>
- In-Reply-To
- <4A335B9A.7080808@pelagic.nl>
Ferry Huberts <ferry.huberts@pelagic.nl> wrote:
> Shawn O. Pearce wrote: > > 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.
Show 15 quoted lines
> > 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.