From 6ff1507b1ea5bb1ddffe63fe8a2ac1380abfa928 Mon Sep 17 00:00:00 2001 From: Seyi Kufoiji Date: Mon, 2 Mar 2026 21:00:15 +0100 Subject: [PATCH] list-objects-filter: use oidmap_clear_with_free() for cleanup Replace the use of oidmap_clear(&seen_at_depth, 1) in filter_trees_free() with oidmap_clear_with_free(). The seen_at_depth map stores heap-allocated struct seen_map_entry objects. Previously, passing 1 relied on oidmap_clear() internally calling free() on each entry. Convert this to the explicit oidmap_clear_with_free() API and provide a typed free_seen_map_entry() helper to free each container entry. This makes the ownership and cleanup policy explicit and removes reliance on the legacy boolean free_entries parameter. Signed-off-by: Seyi Kuforiji Signed-off-by: Junio C Hamano --- list-objects-filter.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/list-objects-filter.c b/list-objects-filter.c index acd65ebb73..fdd63442b3 100644 --- a/list-objects-filter.c +++ b/list-objects-filter.c @@ -143,6 +143,13 @@ struct seen_map_entry { size_t depth; }; +static void free_seen_map_entry(void *e) +{ + struct seen_map_entry *entry = + container_of(e, struct seen_map_entry, base); + free(entry); +} + /* Returns 1 if the oid was in the omits set before it was invoked. */ static int filter_trees_update_omits( struct object *obj, @@ -244,7 +251,7 @@ static void filter_trees_free(void *filter_data) { struct filter_trees_depth_data *d = filter_data; if (!d) return; - oidmap_clear(&d->seen_at_depth, 1); + oidmap_clear_with_free(&d->seen_at_depth, free_seen_map_entry); free(d); }