diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index 019c26687b..de7797813a 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -1868,7 +1868,7 @@ int isis_instance_mpls_te_destroy(struct nb_cb_destroy_args *args) return NB_OK; /* Remove Link State Database */ - ls_ted_del_all(area->mta->ted); + ls_ted_del_all(&area->mta->ted); /* Flush LSP if circuit engage */ for (ALL_LIST_ELEMENTS_RO(area->circuit_list, node, circuit)) { diff --git a/lib/link_state.c b/lib/link_state.c index e4ccd0fb65..639a1d37d8 100644 --- a/lib/link_state.c +++ b/lib/link_state.c @@ -997,25 +997,26 @@ void ls_ted_del(struct ls_ted *ted) XFREE(MTYPE_LS_DB, ted); } -void ls_ted_del_all(struct ls_ted *ted) +void ls_ted_del_all(struct ls_ted **ted) { struct ls_vertex *vertex; struct ls_edge *edge; struct ls_subnet *subnet; - if (ted == NULL) + if (*ted == NULL) return; /* First remove Vertices, Edges and Subnets and associated Link State */ - frr_each_safe (vertices, &ted->vertices, vertex) - ls_vertex_del_all(ted, vertex); - frr_each_safe (edges, &ted->edges, edge) - ls_edge_del_all(ted, edge); - frr_each_safe (subnets, &ted->subnets, subnet) - ls_subnet_del_all(ted, subnet); + frr_each_safe (vertices, &(*ted)->vertices, vertex) + ls_vertex_del_all(*ted, vertex); + frr_each_safe (edges, &(*ted)->edges, edge) + ls_edge_del_all(*ted, edge); + frr_each_safe (subnets, &(*ted)->subnets, subnet) + ls_subnet_del_all(*ted, subnet); /* then remove TED itself */ - ls_ted_del(ted); + ls_ted_del(*ted); + *ted = NULL; } void ls_ted_clean(struct ls_ted *ted) diff --git a/lib/link_state.h b/lib/link_state.h index 761e8b6a27..f46a2068a1 100644 --- a/lib/link_state.h +++ b/lib/link_state.h @@ -746,7 +746,7 @@ extern void ls_ted_del(struct ls_ted *ted); * * @param ted Link State Data Base */ -extern void ls_ted_del_all(struct ls_ted *ted); +extern void ls_ted_del_all(struct ls_ted **ted); /** * Clean Link State Data Base by removing all Vertices, Edges and SubNets marked diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c index 999bc49d91..2679873674 100644 --- a/ospfd/ospf_te.c +++ b/ospfd/ospf_te.c @@ -3908,7 +3908,7 @@ DEFUN (no_ospf_mpls_te, ote_debug("MPLS-TE: ON -> OFF"); /* Remove TED */ - ls_ted_del_all(OspfMplsTE.ted); + ls_ted_del_all(&OspfMplsTE.ted); OspfMplsTE.enabled = false; /* Flush all TE Opaque LSAs */ diff --git a/pathd/path_ted.c b/pathd/path_ted.c index 3440b93399..b30f38f6fb 100644 --- a/pathd/path_ted.c +++ b/pathd/path_ted.c @@ -66,7 +66,7 @@ uint32_t path_ted_teardown(void) PATH_TED_DEBUG("%s : TED [%p]", __func__, ted_state_g.ted); path_ted_unregister_vty(); path_ted_stop_importing_igp(); - ls_ted_del_all(ted_state_g.ted); + ls_ted_del_all(&ted_state_g.ted); path_ted_timer_sync_cancel(); path_ted_timer_refresh_cancel(); return 0; @@ -391,7 +391,7 @@ DEFUN (no_path_ted, } /* Remove TED */ - ls_ted_del_all(ted_state_g.ted); + ls_ted_del_all(&ted_state_g.ted); ted_state_g.enabled = false; PATH_TED_DEBUG("%s: PATHD-TED: ON -> OFF", __func__); ted_state_g.import = IMPORT_UNKNOWN;