git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 1/5] oidmap: make entry cleanup explicit in oidmap_clear

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 2, 2026, 22:23 UTC
Message-ID
<xmqqfr6hyior.fsf@gitster.g>
In-Reply-To
<20260302200018.75731-2-kuforiji98@gmail.com>
Seyi Kuforiji <kuforiji98@gmail.com> writes:
Show 9 quoted lines
>  void oidmap_clear(struct oidmap *map, int free_entries)
>  {
> -	if (!map)
> +	oidmap_clear_with_free(map,
> +		free_entries ? free : NULL);
> +}
> +
> +void oidmap_clear_with_free(struct oidmap *map,
> +			    oidmap_free_fn free_fn)

Made me briefly wonder if passing "void free(void *)" or NULL as oidmap_free_fn would be flagged by the compilers as suspicious, but "typedef void (*oidmap_free_fn)(void *);" is obviously compatible with both, so it is good.

Show 6 quoted lines
> +{
> +	struct hashmap_iter iter;
> +	struct hashmap_entry *e;
> +
> +	if (!map || !map->map.cmpfn)
>  		return;

The first half prepares our oidmap_clear() to be fed a NULL map, but what about the new condition? Where did it come from? What makes it suddenly necessary that in order to "clear" an oidmap you already have to have defined cmpfn?

> -	/* TODO: make oidmap itself not depend on struct layouts */
> -	hashmap_clear_(&map->map, free_entries ? 0 : -1);
This is now achieved by the use of container_of(), right?  Nice.
Show 10 quoted lines
> +	hashmap_iter_init(&map->map, &iter);
> +	while ((e = hashmap_iter_next(&iter))) {
> +		struct oidmap_entry *entry =
> +			container_of(e, struct oidmap_entry, internal_entry);
> +		if (free_fn)
> +			free_fn(entry);
> +	}
> +
> +	hashmap_clear(&map->map);
>  }
Previous: Seyi KuforijiNext: Seyi Kuforiji
Message 10 of 30 in “oidmap: migrate cleanup to oidmap_clear_with_free()”
  1. 0/5 oidmap: migrate cleanup to oidmap_clear_with_free()Seyi Kuforiji, Feb 27, 2026
  2. 1/5 oidmap: make entry cleanup explicit in oidmap_clearSeyi Kuforiji, Feb 27, 2026
  3. 2/5 builtin/rev-list: migrate missing_objects cleanup to oidmap_clear_with_free()Seyi Kuforiji, Feb 27, 2026
  4. Junio C HamanoFeb 28, 2026
  5. 3/5 list-objects-filter: use oidmap_clear_with_free() for cleanupSeyi Kuforiji, Feb 27, 2026
  6. 4/5 odb: use oidmap_clear_with_free() to release replace_map entriesSeyi Kuforiji, Feb 27, 2026
  7. 5/5 sequencer: use oidmap_clear_with_free() for string_entry cleanupSeyi Kuforiji, Feb 27, 2026
  8. 0/5 oidmap: migrate cleanup to oidmap_clear_with_free()Seyi Kuforiji, Mar 2, 2026
  9. 1/5 oidmap: make entry cleanup explicit in oidmap_clearSeyi Kuforiji, Mar 2, 2026
  10. Junio C HamanoMar 2, 2026
  11. 2/5 builtin/rev-list: migrate missing_objects cleanup to oidmap_clear_with_free()Seyi Kuforiji, Mar 2, 2026
  12. Junio C HamanoMar 2, 2026
  13. Patrick SteinhardtMar 4, 2026
  14. 3/5 list-objects-filter: use oidmap_clear_with_free() for cleanupSeyi Kuforiji, Mar 2, 2026
  15. Junio C HamanoMar 2, 2026
  16. Patrick SteinhardtMar 4, 2026
  17. Junio C HamanoMar 4, 2026
  18. Seyi KuforijiMar 4, 2026
  19. Junio C HamanoMar 4, 2026
  20. Junio C HamanoMar 4, 2026
  21. 4/5 odb: use oidmap_clear_with_free() to release replace_map entriesSeyi Kuforiji, Mar 2, 2026
  22. Junio C HamanoMar 2, 2026
  23. 5/5 sequencer: use oidmap_clear_with_free() for string_entry cleanupSeyi Kuforiji, Mar 2, 2026
  24. Junio C HamanoMar 2, 2026
  25. Patrick SteinhardtMar 4, 2026
  26. 0/2 oidmap: migrate cleanup to oidmap_clear_with_free()Seyi Kuforiji, Mar 5, 2026
  27. 1/2 oidmap: make entry cleanup explicit in oidmap_clearSeyi Kuforiji, Mar 5, 2026
  28. 2/2 builtin/rev-list: migrate missing_objects cleanup to oidmap_clear_with_free()Seyi Kuforiji, Mar 5, 2026
  29. Patrick SteinhardtMar 5, 2026
  30. Junio C HamanoMar 5, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.