From fa4b43c831a95e97d474741281987b66b06290bb Mon Sep 17 00:00:00 2001 From: Jeff Hostetler Date: Tue, 26 Feb 2019 13:53:05 -0500 Subject: [PATCH] midx: verify: add midx packfiles to the packed_git list Fix "git multi-pack-index verify" to handle repos with thousands of packfiles. Midx verify adds the individual "packed_git" structures to the multi_pack_index.packs array, but it does not add them to the "repository.objects.packed_git" list. During the verification code, each packfile is opened and scanned. And "pack_open_fds" is incremented. If "pack_open_fds" equals the "pack_max_fds" open_packed_git_1() calls close_one_pack() to LRU-style close an already open packfile. But because the packfiles were never added to the "packed_git" list, close_one_pack() does nothing. If there are very many packfiles, Git runs out of file descriptors and fails. Note that this was observed on Windows when build with GCC and in a repository with more than (2048-25) packfiles. Signed-off-by: Jeff Hostetler --- midx.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/midx.c b/midx.c index 175f66842c62a4..dd72cac7839a42 100644 --- a/midx.c +++ b/midx.c @@ -1014,6 +1014,9 @@ int verify_midx_file(const char *object_dir) for (i = 0; i < m->num_packs; i++) { if (prepare_midx_pack(m, i)) midx_report("failed to load pack in position %d", i); + + if (m->packs[i]) + install_packed_git(the_repository, m->packs[i]); } for (i = 0; i < 255; i++) {