Eric Wong <e@xxxxxxxxx> writes: > Eric Wong <e@xxxxxxxxx> wrote: >> --- a/packfile.c >> +++ b/packfile.c >> @@ -97,7 +97,11 @@ static int check_packed_git_idx(const char *path, struct packed_git *p) >> close(fd); >> return error("index file %s is too small", path); >> } >> - idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd, 0); >> + do { >> + idx_map = xmmap_gently(NULL, idx_size, PROT_READ, MAP_PRIVATE, >> + fd, 0); >> + } while (idx_map == MAP_FAILED && errno == ENOMEM >> + && unuse_one_window(p)); > > Oops, I dropped extra error handling here :x > >> close(fd); >> >> ret = load_idx(path, hashsz, idx_map, idx_size, p); Something like this, perhaps? You'd also need _() around the error message you added to object-file.c in [2/4], I would think. packfile.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git c/packfile.c w/packfile.c index 2904560f52..b31f14ecb7 100644 --- c/packfile.c +++ w/packfile.c @@ -102,6 +102,10 @@ static int check_packed_git_idx(const char *path, struct packed_git *p) fd, 0); } while (idx_map == MAP_FAILED && errno == ENOMEM && unuse_one_window(p)); + if (idx_map == MAP_FAILED) { + close(fd); + return error_errno(_("%s cannot be mapped"), path); + } close(fd); ret = load_idx(path, hashsz, idx_map, idx_size, p);