From 3e634bfbcc0933f8f23433cef9380771447cb770 Mon Sep 17 00:00:00 2001 From: Tim Kourt Date: Wed, 2 Oct 2019 13:39:58 -0700 Subject: [PATCH] netconfig: Optimize IPv4 address deletion Decrease the queue traversals to a single pass --- src/netconfig.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/netconfig.c b/src/netconfig.c index f057f62f..285d5fef 100644 --- a/src/netconfig.c +++ b/src/netconfig.c @@ -427,22 +427,22 @@ static void netconfig_ifaddr_deleted(struct netconfig *netconfig, uint32_t len) { struct netconfig_ifaddr *ifaddr; - char *ip; + struct netconfig_ifaddr query; - rtnl_ifaddr_extract(ifa, len, NULL, &ip, NULL); + rtnl_ifaddr_extract(ifa, len, NULL, &query.ip, NULL); - ifaddr = netconfig_ifaddr_find(netconfig, ifa->ifa_family, - ifa->ifa_prefixlen, ip); + query.family = ifa->ifa_family; + query.prefix_len = ifa->ifa_prefixlen; - l_free(ip); + ifaddr = l_queue_remove_if(netconfig->ifaddr_list, + netconfig_ifaddr_match, &query); + l_free(query.ip); if (!ifaddr) return; l_debug("ifaddr %s/%u", ifaddr->ip, ifaddr->prefix_len); - l_queue_remove(netconfig->ifaddr_list, ifaddr); - netconfig_ifaddr_destroy(ifaddr); }