diff --git a/src/cntlr.c b/src/cntlr.c index 40929873b79bcc16363302d8e2149e3ee1e08cf0..7b110a127a9a3fab22aa1a4dcc7069f5489622b1 100644 --- a/src/cntlr.c +++ b/src/cntlr.c @@ -1492,17 +1492,28 @@ struct node *alloc_node_init(struct controller *c, uint8_t *hwaddr) return n; } -void node_clean_stalist(struct controller *c) +void cntlr_clean_stalist(struct controller *c) { struct sta *s = NULL, *tmp; list_for_each_entry_safe(s, tmp, &c->stalist, list) { + free_bcn_metrics(c, s); list_del(&s->list); free(s); } } -void node_clean_linklist(struct controller *c) +void cntlr_clean_bcnreqlist(struct controller *c) +{ + struct bcnreq *b = NULL, *tmp; + + list_for_each_entry_safe(b, tmp, &c->bcnreqlist, list) { + list_del(&b->list); + free(b); + } +} + +void cntlr_clean_linklist(struct controller *c) { struct netif_link *l = NULL, *tmp; @@ -1540,8 +1551,6 @@ static void cntlr_clean_nodelist(struct controller *c) struct node *n = NULL, *tmp; list_for_each_entry_safe(n, tmp, &c->nodelist, list) { - node_clean_stalist(c); - node_clean_linklist(c); node_clean_radiolist(n); list_del(&n->list); free(n); @@ -2707,6 +2716,9 @@ void run_controller(void) out_exit: map_unsubscribe(ctx, c->subscriber); + cntlr_clean_stalist(c); + cntlr_clean_bcnreqlist(c); + cntlr_clean_linklist(c); cntlr_clean_nodelist(c); ubus_unregister_event_handler(ctx, &c->evh); cntlr_remove_object(c);