[PATCH 3/8] midx: stop using linked list when closing MIDX

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Signed-off-by: Patrick Steinhardt <ps@xxxxxx>
---
 midx.c     | 11 ++++++-----
 packfile.c | 10 +++++-----
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/midx.c b/midx.c
index a91231bfcdf..416b3e8b54f 100644
--- a/midx.c
+++ b/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,11 +834,13 @@ 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) {
+		for (struct odb_source *source = r->objects->sources; source; source = source->next) {
+			if (source->multi_pack_index)
+				close_midx(source->multi_pack_index);
 			source->multi_pack_index = NULL;
+		}
+		r->objects->multi_pack_index = NULL;
 	}
 
 	if (remove_path(midx.buf))
diff --git a/packfile.c b/packfile.c
index b43dd2fe6cb..546c161d0c1 100644
--- a/packfile.c
+++ b/packfile.c
@@ -369,12 +369,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)
-			source->multi_pack_index = NULL;
+	for (struct odb_source *source = o->sources; source; source = source->next) {
+		if (source->multi_pack_index)
+			close_midx(source->multi_pack_index);
+		source->multi_pack_index = NULL;
 	}
+	o->multi_pack_index = NULL;
 
 	close_commit_graph(o);
 }

-- 
2.50.1.327.g047016eb4a.dirty





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux