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 <kuforiji98@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Seyi Kufoiji
2026-03-02 21:00:16 +01:00
committed by Junio C Hamano
parent 6ff1507b1e
commit bbf4b4b6db

11
odb.c
View File

@@ -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);