mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-29 10:11:52 +00:00
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:
parent
5b3e0735cc
commit
87acad8698
@ -520,6 +520,10 @@ void isis_area_destroy(struct isis_area *area)
|
|||||||
isis_area_invalidate_routes(area, area->is_type);
|
isis_area_invalidate_routes(area, area->is_type);
|
||||||
isis_area_verify_routes(area);
|
isis_area_verify_routes(area);
|
||||||
|
|
||||||
|
#ifndef FABRICD
|
||||||
|
flex_algos_free(area->flex_algos);
|
||||||
|
#endif /* ifndef FABRICD */
|
||||||
|
|
||||||
isis_sr_area_term(area);
|
isis_sr_area_term(area);
|
||||||
|
|
||||||
isis_mpls_te_term(area);
|
isis_mpls_te_term(area);
|
||||||
|
@ -20,6 +20,9 @@
|
|||||||
DEFINE_MTYPE_STATIC(LIB, FLEX_ALGO_DATABASE, "Flex-Algo database");
|
DEFINE_MTYPE_STATIC(LIB, FLEX_ALGO_DATABASE, "Flex-Algo database");
|
||||||
DEFINE_MTYPE_STATIC(LIB, FLEX_ALGO, "Flex-Algo algorithm information");
|
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,
|
struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
|
||||||
flex_algo_releaser_t releaser)
|
flex_algo_releaser_t releaser)
|
||||||
{
|
{
|
||||||
@ -32,6 +35,17 @@ struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
|
|||||||
return flex_algos;
|
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,
|
struct flex_algo *flex_algo_alloc(struct flex_algos *flex_algos,
|
||||||
uint8_t algorithm, void *arg)
|
uint8_t algorithm, void *arg)
|
||||||
{
|
{
|
||||||
|
@ -107,6 +107,7 @@ struct flex_algos {
|
|||||||
*/
|
*/
|
||||||
struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
|
struct flex_algos *flex_algos_alloc(flex_algo_allocator_t allocator,
|
||||||
flex_algo_releaser_t releaser);
|
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,
|
struct flex_algo *flex_algo_alloc(struct flex_algos *flex_algos,
|
||||||
uint8_t algorithm, void *arg);
|
uint8_t algorithm, void *arg);
|
||||||
struct flex_algo *flex_algo_lookup(struct flex_algos *flex_algos,
|
struct flex_algo *flex_algo_lookup(struct flex_algos *flex_algos,
|
||||||
|
Loading…
Reference in New Issue
Block a user