midx: stop using linked list when closing MIDX
When calling `close_midx()` we not only close the multi-pack index for one object source, but instead we iterate through the whole linked list of MIDXs to close all of them. This linked list is about to go away in favor of using the new per-source pointer to its respective MIDX. Refactor the function to iterate through sources instead. Note that after this patch, there's a couple of callsites left that continue to use `close_midx()` without iterating through all sources. These are all cases where we don't care about the MIDX from other sources though, so it's fine to keep them as-is. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
ec4380f446
commit
6567432ab4
13
midx.c
13
midx.c
|
@ -401,7 +401,6 @@ void close_midx(struct multi_pack_index *m)
|
|||
if (!m)
|
||||
return;
|
||||
|
||||
close_midx(m->next);
|
||||
close_midx(m->base_midx);
|
||||
|
||||
munmap((unsigned char *)m->data, m->data_len);
|
||||
|
@ -835,12 +834,16 @@ void clear_midx_file(struct repository *r)
|
|||
|
||||
get_midx_filename(r->hash_algo, &midx, r->objects->sources->path);
|
||||
|
||||
if (r->objects && r->objects->multi_pack_index) {
|
||||
close_midx(r->objects->multi_pack_index);
|
||||
r->objects->multi_pack_index = NULL;
|
||||
for (struct odb_source *source = r->objects->sources; source; source = source->next)
|
||||
if (r->objects) {
|
||||
struct odb_source *source;
|
||||
|
||||
for (source = r->objects->sources; source; source = source->next) {
|
||||
if (source->midx)
|
||||
close_midx(source->midx);
|
||||
source->midx = NULL;
|
||||
}
|
||||
r->objects->multi_pack_index = NULL;
|
||||
}
|
||||
|
||||
if (remove_path(midx.buf))
|
||||
die(_("failed to clear multi-pack-index at %s"), midx.buf);
|
||||
|
|
|
@ -361,6 +361,7 @@ void close_pack(struct packed_git *p)
|
|||
|
||||
void close_object_store(struct object_database *o)
|
||||
{
|
||||
struct odb_source *source;
|
||||
struct packed_git *p;
|
||||
|
||||
for (p = o->packed_git; p; p = p->next)
|
||||
|
@ -369,12 +370,12 @@ void close_object_store(struct object_database *o)
|
|||
else
|
||||
close_pack(p);
|
||||
|
||||
if (o->multi_pack_index) {
|
||||
close_midx(o->multi_pack_index);
|
||||
o->multi_pack_index = NULL;
|
||||
for (struct odb_source *source = o->sources; source; source = source->next)
|
||||
for (source = o->sources; source; source = source->next) {
|
||||
if (source->midx)
|
||||
close_midx(source->midx);
|
||||
source->midx = NULL;
|
||||
}
|
||||
o->multi_pack_index = NULL;
|
||||
|
||||
close_commit_graph(o);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue