From bbf4b4b6db3f62285672c6ef0281dfe3f846d2e7 Mon Sep 17 00:00:00 2001 From: Seyi Kufoiji Date: Mon, 2 Mar 2026 21:00:16 +0100 Subject: [PATCH] odb: use oidmap_clear_with_free() to release replace_map entries Replace the direct oidmap_clear() call in odb_free() with oidmap_clear_with_free(), and introduce a free_replace_map_entry() helper to properly free each struct replace_object stored in the map. This centralizes cleanup logic and ensures entries are released correctly via a dedicated callback. Signed-off-by: Seyi Kuforiji Signed-off-by: Junio C Hamano --- odb.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/odb.c b/odb.c index ac70b6a099..b7cd5b0f9d 100644 --- a/odb.c +++ b/odb.c @@ -14,6 +14,7 @@ #include "object-file-convert.h" #include "object-file.h" #include "odb.h" +#include "oidmap.h" #include "packfile.h" #include "path.h" #include "promisor-remote.h" @@ -1089,6 +1090,13 @@ void odb_close(struct object_database *o) close_commit_graph(o); } +static void free_replace_map_entry(void *e) +{ + struct replace_object *entry = + container_of(e, struct replace_object, original); + free(entry); +} + static void odb_free_sources(struct object_database *o) { while (o->sources) { @@ -1109,7 +1117,8 @@ void odb_free(struct object_database *o) free(o->alternate_db); - oidmap_clear(&o->replace_map, 1); + if (o->replace_map_initialized) + oidmap_clear_with_free(&o->replace_map, free_replace_map_entry); pthread_mutex_destroy(&o->replace_mutex); odb_close(o);