From 4029fa48a18e3a6c8af3a2478558e74184fd1786 Mon Sep 17 00:00:00 2001 From: "nevadita.chatterjee" <nevadita.chatterjee@iopsys.eu> Date: Mon, 11 Apr 2022 16:45:06 +0530 Subject: [PATCH] map-controller: Fixing memory leaks --- src/cntlr.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/cntlr.c b/src/cntlr.c index 4ba8a59d..cae9d665 100644 --- a/src/cntlr.c +++ b/src/cntlr.c @@ -1357,19 +1357,27 @@ struct node *alloc_node_init(struct controller *c, uint8_t *hwaddr) return n; } -#if 0 -void node_clean_stalist(struct node *n) +void node_clean_stalist(struct controller *c) { - struct radio_policy *r = NULL, *tmp; + struct sta *s = NULL, *tmp; - list_for_each_entry_safe(p, tmp, &n->stalist, list) { - list_del(&->list); - free(p); + list_for_each_entry_safe(s, tmp, &c->stalist, list) { + list_del(&s->list); + free(s); } +} - return 0; +void node_clean_linklist(struct controller *c) +{ + struct netif_link *l = NULL, *tmp; + + list_for_each_entry_safe(l, tmp, &c->linklist, list) { + free(l->metrics); + list_del(&l->list); + free(l); + } } -#endif + static void radio_clean_iflist(struct netif_radio *r) { @@ -1397,8 +1405,10 @@ static void cntlr_clean_nodelist(struct controller *c) struct node *n = NULL, *tmp; list_for_each_entry_safe(n, tmp, &c->nodelist, list) { - list_del(&n->list); + node_clean_stalist(c); + node_clean_linklist(c); node_clean_radiolist(n); + list_del(&n->list); free(n); } } @@ -2548,13 +2558,12 @@ void run_controller(void) uloop_run(); out_exit: - ubus_unregister_event_handler(ctx, &c->evh); map_unsubscribe(ctx, c->subscriber); + cntlr_clean_nodelist(c); + ubus_unregister_event_handler(ctx, &c->evh); cntlr_remove_object(c); cmdu_ackq_free(&c->cmdu_ack_q); cntlr_config_clean(&c->cfg); - cntlr_clean_nodelist(c); - ubus_free(ctx); uloop_done(); free(c); } -- GitLab