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-03-05 06:55:02 +00:00
committed by Junio C Hamano
parent 6b837b4c3c
commit d55ffd0ee4

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