From 919aeb666a33c79838bff4c6848d37c09b7f0562 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 13 Apr 2025 03:08:31 +0900 Subject: [PATCH] network/network: use hash_ops with destructor for managing stacked netdevs --- src/network/networkd-network.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 00851243b5a..e7a2e034a01 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -44,6 +44,11 @@ #include "strv.h" #include "tclass.h" +DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR( + stacked_netdevs_hash_ops, + char, string_hash_func, string_compare_func, + NetDev, netdev_unref); + static int network_resolve_netdev_one(Network *network, const char *name, NetDevKind kind, NetDev **ret) { const char *kind_string; NetDev *netdev; @@ -105,14 +110,14 @@ static int network_resolve_stacked_netdevs(Network *network) { if (network_resolve_netdev_one(network, name, PTR_TO_INT(kind), &netdev) <= 0) continue; - r = hashmap_ensure_put(&network->stacked_netdevs, &string_hash_ops, netdev->ifname, netdev); + r = hashmap_ensure_put(&network->stacked_netdevs, &stacked_netdevs_hash_ops, netdev->ifname, netdev); if (r == -ENOMEM) return log_oom(); if (r < 0) log_warning_errno(r, "%s: Failed to add NetDev '%s' to network, ignoring: %m", network->filename, (const char *) name); - netdev = NULL; + TAKE_PTR(netdev); } return 0; @@ -825,7 +830,7 @@ static Network *network_free(Network *network) { netdev_unref(network->bridge); netdev_unref(network->bond); netdev_unref(network->vrf); - hashmap_free_with_destructor(network->stacked_netdevs, netdev_unref); + hashmap_free(network->stacked_netdevs); /* static configs */ set_free_free(network->ipv6_proxy_ndp_addresses); -- 2.47.3