summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLouis Scalbert <louis.scalbert@6wind.com>2023-04-24 18:19:03 +0200
committerLouis Scalbert <louis.scalbert@6wind.com>2023-04-27 15:37:36 +0200
commit87acad869813e8248bdde876b96a67b31a565fbb (patch)
tree865833bc8dab0314f4137c92fb62e2d21393b562 /lib
parent5b3e0735cce0f2de964070954a6a0d680a93ceb0 (diff)
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>
Diffstat (limited to 'lib')
-rw-r--r--lib/flex_algo.c14
-rw-r--r--lib/flex_algo.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/lib/flex_algo.c b/lib/flex_algo.c
index b363b5f277..72cefc551d 100644
--- a/lib/flex_algo.c
+++ b/lib/flex_algo.c
@@ -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)
{
diff --git a/lib/flex_algo.h b/lib/flex_algo.h
index e012f46862..9fc2851603 100644
--- a/lib/flex_algo.h
+++ b/lib/flex_algo.h
@@ -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,