fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon

The `state.cookies` hashmap is initialized during daemon startup but
never freed during cleanup in the `done:` label of
fsmonitor_run_daemon().  The cookie entries also have names allocated
via strbuf_detach() that must be freed individually.

Iterate the hashmap to free each cookie name, then call
hashmap_clear_and_free() to release the entries and table.

Signed-off-by: Paul Tarjan <github@paulisageek.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Paul Tarjan
2026-04-09 04:59:25 +00:00
committed by Junio C Hamano
parent c0901a7cd1
commit 20ea1e7e3e

View File

@@ -1404,6 +1404,15 @@ static int fsmonitor_run_daemon(void)
done:
pthread_cond_destroy(&state.cookies_cond);
pthread_mutex_destroy(&state.main_lock);
{
struct hashmap_iter iter;
struct fsmonitor_cookie_item *cookie;
hashmap_for_each_entry(&state.cookies, &iter, cookie, entry)
free(cookie->name);
hashmap_clear_and_free(&state.cookies,
struct fsmonitor_cookie_item, entry);
}
fsm_listen__dtor(&state);
fsm_health__dtor(&state);