git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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.
Previous: Ferry HubertsNext: Ferry Huberts
Message 4 of 7 in “Add getLong to RepositoryConfig”
  1. 1/2 Add getLong to RepositoryConfigShawn O. Pearce, Jun 12, 2009
  2. 2/2 Allow core.packedGitLimit to exceed "2 g"Shawn O. Pearce, Jun 12, 2009
  3. Ferry HubertsJun 13, 2009
  4. Shawn O. PearceJun 13, 2009
  5. Ferry HubertsJun 14, 2009
  6. Ferry HubertsJun 13, 2009
  7. Shawn O. PearceJun 13, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.