isisd, lib: fix flex-algo database memory leak at area destruction

Free flex-algorithm database memory when an IS-IS area is destroyed.

Fixes: 735fb37db1 ("lib: add library for igp flexible-algorithm")
Fixes: 7f198e063c ("isisd: add isis flex-algo base interface")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
Louis Scalbert 2023-04-24 18:19:03 +02:00
parent 5b3e0735cc
commit 87acad8698
3 changed files with 19 additions and 0 deletions

View File

@ -520,6 +520,10 @@ void isis_area_destroy(struct isis_area *area)
isis_area_invalidate_routes(area, area->is_type);
isis_area_verify_routes(area);
#ifndef FABRICD
flex_algos_free(area->flex_algos);
#endif /* ifndef FABRICD */
isis_sr_area_term(area);
isis_mpls_te_term(area);

View File

@ -20,6 +20,9 @@
DEFINE_MTYPE_STATIC(LIB, FLEX_ALGO_DATABASE, "Flex-Algo database");
DEFINE_MTYPE_STATIC(LIB, FLEX_ALGO, "Flex-Algo algorithm information");
static void _flex_algo_delete(struct flex_algos *flex_algos,
struct flex_algo *fa);
struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
flex_algo_releaser_t releaser)
{
@ -32,6 +35,17 @@ struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
return flex_algos;
}
void flex_algos_free(struct flex_algos *flex_algos)
{
struct listnode *node, *nnode;
struct flex_algo *fa;
for (ALL_LIST_ELEMENTS(flex_algos->flex_algos, node, nnode, fa))
_flex_algo_delete(flex_algos, fa);
list_delete(&flex_algos->flex_algos);
XFREE(MTYPE_FLEX_ALGO_DATABASE, flex_algos);
}
struct flex_algo *flex_algo_alloc(struct flex_algos *flex_algos,
uint8_t algorithm, void *arg)
{

View File

@ -107,6 +107,7 @@ struct flex_algos {
*/
struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
flex_algo_releaser_t releaser);
void flex_algos_free(struct flex_algos *flex_algos);
struct flex_algo *flex_algo_alloc(struct flex_algos *flex_algos,
uint8_t algorithm, void *arg);
struct flex_algo *flex_algo_lookup(struct flex_algos *flex_algos,