summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2006-12-24 05:47:23 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-12-29 19:36:45 (GMT)
commitc4712e4553f13d87d655325a57538f299402d457 (patch)
treed09717f9d9a811d36ae5572b131a5b40e1dfcdcf /config.c
parent97bfeb34df1aa8a1cf232278624a5a5c924ee380 (diff)
downloadgit-c4712e4553f13d87d655325a57538f299402d457.zip
git-c4712e4553f13d87d655325a57538f299402d457.tar.gz
git-c4712e4553f13d87d655325a57538f299402d457.tar.bz2
Replace mmap with xmmap, better handling MAP_FAILED.
In some cases we did not even bother to check the return value of mmap() and just assume it worked. This is bad, because if we are out of virtual address space the kernel returned MAP_FAILED and we would attempt to dereference that address, segfaulting without any real error output to the user. We are replacing all calls to mmap() with xmmap() and moving all MAP_FAILED checking into that single location. If a mmap call fails we try to release enough least-recently-used pack windows to possibly succeed, then retry the mmap() attempt. If we cannot mmap even after releasing pack memory then we die() as none of our callers have any reasonable recovery strategy for a failed mmap. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'config.c')
-rw-r--r--config.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/config.c b/config.c
index 3b8da56..2e0d5a8 100644
--- a/config.c
+++ b/config.c
@@ -704,7 +704,7 @@ int git_config_set_multivar(const char* key, const char* value,
}
fstat(in_fd, &st);
- contents = mmap(NULL, st.st_size, PROT_READ,
+ contents = xmmap(NULL, st.st_size, PROT_READ,
MAP_PRIVATE, in_fd, 0);
close(in_fd);