[PATCH v2 3/5] list-objects-filter: use oidmap_clear_with_free() for cleanup
- From
Seyi Kuforiji <kuforiji98@gmail.com>
- Date
- Mar 2, 2026, 20:00 UTC
- Message-ID
- <20260302200018.75731-4-kuforiji98@gmail.com>
- In-Reply-To
- <20260302200018.75731-1-kuforiji98@gmail.com>
From: Seyi Kufoiji <kuforiji98@gmail.com>
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 <kuforiji98@gmail.com> --- 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 78316e7f90..0038bfaac5 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); }
-- 2.43.0