diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c index ea089c1e10..ee5897750a 100644 --- a/src/resolve/resolved-link.c +++ b/src/resolve/resolved-link.c @@ -34,6 +34,14 @@ #include "strv.h" #include "tmpfile-util.h" +DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR( + link_hash_ops, + void, + trivial_hash_func, + trivial_compare_func, + Link, + link_free); + int link_new(Manager *m, Link **ret, int ifindex) { _cleanup_(link_freep) Link *l = NULL; int r; @@ -58,7 +66,7 @@ int link_new(Manager *m, Link **ret, int ifindex) { if (asprintf(&l->state_file, "/run/systemd/resolve/netif/%i", ifindex) < 0) return -ENOMEM; - r = hashmap_ensure_put(&m->links, NULL, INT_TO_PTR(ifindex), l); + r = hashmap_ensure_put(&m->links, &link_hash_ops, INT_TO_PTR(ifindex), l); if (r < 0) return r; diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 2e95d6d9c0..3101d2cc06 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -839,8 +839,6 @@ int manager_start(Manager *m) { } Manager* manager_free(Manager *m) { - Link *l; - if (!m) return NULL; @@ -848,9 +846,7 @@ Manager* manager_free(Manager *m) { dns_server_unlink_all(m->fallback_dns_servers); dns_search_domain_unlink_all(m->search_domains); - while ((l = hashmap_first(m->links))) - link_free(l); - + m->links = hashmap_free(m->links); m->delegates = hashmap_free(m->delegates); while (m->dns_queries) @@ -869,7 +865,6 @@ Manager* manager_free(Manager *m) { #endif set_free(m->refuse_record_types); - hashmap_free(m->links); hashmap_free(m->dns_transactions); sd_event_source_unref(m->network_event_source);