diff options
| author | Louis Scalbert <louis.scalbert@6wind.com> | 2023-04-24 18:19:03 +0200 |
|---|---|---|
| committer | Louis Scalbert <louis.scalbert@6wind.com> | 2023-04-27 15:37:36 +0200 |
| commit | 87acad869813e8248bdde876b96a67b31a565fbb (patch) | |
| tree | 865833bc8dab0314f4137c92fb62e2d21393b562 /lib | |
| parent | 5b3e0735cce0f2de964070954a6a0d680a93ceb0 (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.c | 14 | ||||
| -rw-r--r-- | lib/flex_algo.h | 1 |
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, |
