From: Junio C Hamano Date: Fri, 1 May 2020 20:39:55 +0000 (-0700) Subject: Merge branch 'ds/multi-pack-index' X-Git-Tag: v2.27.0-rc0~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=29d74275c44c1636acabdb5a3822c3872ebf43de;p=thirdparty%2Fgit.git Merge branch 'ds/multi-pack-index' The multi-pack-index left mmapped file descriptors open when it does not have to. * ds/multi-pack-index: multi-pack-index: close file descriptor after mmap --- 29d74275c44c1636acabdb5a3822c3872ebf43de diff --cc midx.c index a520e26395,95d29ce462..9a61d3b37d --- a/midx.c +++ b/midx.c @@@ -72,9 -68,9 +72,9 @@@ struct multi_pack_index *load_multi_pac FREE_AND_NULL(midx_name); midx_map = xmmap(NULL, midx_size, PROT_READ, MAP_PRIVATE, fd, 0); + close(fd); - FLEX_ALLOC_MEM(m, object_dir, object_dir, strlen(object_dir)); + FLEX_ALLOC_STR(m, object_dir, object_dir); - m->fd = fd; m->data = midx_map; m->data_len = midx_size; m->local = local; @@@ -182,20 -180,16 +182,18 @@@ cleanup_fail return NULL; } -static void close_midx(struct multi_pack_index *m) +void close_midx(struct multi_pack_index *m) { uint32_t i; + + if (!m) + return; + munmap((unsigned char *)m->data, m->data_len); - close(m->fd); - m->fd = -1; for (i = 0; i < m->num_packs; i++) { - if (m->packs[i]) { - close_pack(m->packs[i]); - free(m->packs); - } + if (m->packs[i]) + m->packs[i]->multi_pack_index = 0; } FREE_AND_NULL(m->packs); FREE_AND_NULL(m->pack_names);