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

Re: [PATCH 7/7] Replace mmap with xmmap, better handling MAP_FAILED.

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 24, 2006, 13:22 UTC
Message-ID
<Pine.LNX.4.63.0612241410400.19693@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<20061224054723.GG8146@spearce.org>
Hi,
On Sun, 24 Dec 2006, Shawn O. Pearce wrote:
Show 13 quoted lines
> diff --git a/diff.c b/diff.c
> index f14288b..244292a 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -1341,10 +1341,8 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
>  		fd = open(s->path, O_RDONLY);
>  		if (fd < 0)
>  			goto err_empty;
> -		s->data = mmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, 0);
> +		s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, 0);
>  		close(fd);
> -		if (s->data == MAP_FAILED)
> -			goto err_empty;

The only gripe I have here is that the old code could actually say where the problem occurred ("cannot read data blob for <blabla>"), but that probably does not matter so much, now that we can hardly run out of memory on a decent machine, even using big packfiles.

Show 13 quoted lines
> diff --git a/read-cache.c b/read-cache.c
> index b8d83cc..ca3efbb 100644
> --- a/read-cache.c
> +++ b/read-cache.c
> @@ -798,7 +798,7 @@ int read_cache_from(const char *path)
>  		cache_mmap_size = st.st_size;
>  		errno = EINVAL;
>  		if (cache_mmap_size >= sizeof(struct cache_header) + 20)
> -			cache_mmap = mmap(NULL, cache_mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
> +			cache_mmap = xmmap(NULL, cache_mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
>  	}
>  	close(fd);
>  	if (cache_mmap == MAP_FAILED)

This MAP_FAILED no longer has anything to do with MAP_FAILED, but rather with fstat failed, so you probably want to move that into an else construct just before "close(fd);".

All in all it is a good change -- for the builtin programs.

But it is less good for the libification. Maybe it is time for a discussion about the possible strategies to avoid dying in libgit.a?

Ciao, Dscho

Previous: Shawn O. PearceNext: Shawn Pearce
Message 12 of 13 in “Switch git_mmap to use pread.”
  1. 2/7 Switch git_mmap to use pread.Shawn O. Pearce, Dec 24, 2006
  2. Johannes SchindelinDec 24, 2006
  3. Alon ZivDec 24, 2006
  4. Shawn PearceDec 24, 2006
  5. Linus TorvaldsDec 24, 2006
  6. 3/7 Ensure packed_git.next is initialized to NULL.Shawn O. Pearce, Dec 24, 2006
  7. 4/7 Default core.packdGitWindowSize to 1 MiB if NO_MMAP.Shawn O. Pearce, Dec 24, 2006
  8. 5/7 Don't exit successfully on EPIPE in read_or_die.Shawn O. Pearce, Dec 24, 2006
  9. 6/7 Release pack windows before reporting out of memory.Shawn O. Pearce, Dec 24, 2006
  10. Johannes SchindelinDec 24, 2006
  11. 7/7 Replace mmap with xmmap, better handling MAP_FAILED.Shawn O. Pearce, Dec 24, 2006
  12. Johannes SchindelinDec 24, 2006
  13. Shawn PearceDec 24, 2006

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.