From d289ecd663a43d59c68b52c33e981b0096519063 Mon Sep 17 00:00:00 2001 From: Yunfeng Ye Date: Mon, 28 Oct 2019 19:03:19 +0800 Subject: [PATCH 32/53] irqbalance: use g_list_free_full() in clear_cpu_tree() Resource is freed by traversing each list in clear_cpu_tree(), which can be replaced by g_list_free_full(), so make the code simpler. In addition, the children and numa_nodes list of cpus is empty, so free_cpu_topo() also free the list for cpus have no impact. Signed-off-by: Yunfeng Ye --- cputree.c | 47 +++++++++++++++-------------------------------- 1 file changed, 15 insertions(+), 32 deletions(-) diff --git a/cputree.c b/cputree.c index acf6a47..c88feda 100644 --- a/cputree.c +++ b/cputree.c @@ -540,6 +540,15 @@ void parse_cpu_tree(void) } +static void free_cpu_topo(gpointer data) +{ + struct topo_obj *obj = data; + + g_list_free(obj->children); + g_list_free(obj->interrupts); + g_list_free(obj->numa_nodes); + free(obj); +} /* * This function frees all memory related to a cpu tree so that a new tree @@ -547,43 +556,17 @@ void parse_cpu_tree(void) */ void clear_cpu_tree(void) { - GList *item; - struct topo_obj *cpu; - struct topo_obj *cache_domain; - struct topo_obj *package; - - while (packages) { - item = g_list_first(packages); - package = item->data; - g_list_free(package->children); - g_list_free(package->interrupts); - g_list_free(package->numa_nodes); - free(package); - packages = g_list_delete_link(packages, item); - } + g_list_free_full(packages, free_cpu_topo); + packages = NULL; package_count = 0; - while (cache_domains) { - item = g_list_first(cache_domains); - cache_domain = item->data; - g_list_free(cache_domain->children); - g_list_free(cache_domain->interrupts); - g_list_free(cache_domain->numa_nodes); - free(cache_domain); - cache_domains = g_list_delete_link(cache_domains, item); - } + g_list_free_full(cache_domains, free_cpu_topo); + cache_domains = NULL; cache_domain_count = 0; - - while (cpus) { - item = g_list_first(cpus); - cpu = item->data; - g_list_free(cpu->interrupts); - free(cpu); - cpus = g_list_delete_link(cpus, item); - } + g_list_free_full(cpus, free_cpu_topo); + cpus = NULL; core_count = 0; - } static gint compare_cpus(gconstpointer a, gconstpointer b) -- 2.23.0