Merge pull request #7375 from vishaldhingra/static

staticd: fixed memory leak on shudown
This commit is contained in:
Rafael Zalamena 2020-11-11 09:05:34 -03:00 committed by GitHub
commit b4fb063e5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 1 deletions

View File

@ -23,6 +23,7 @@
DECLARE_MGROUP(STATIC) DECLARE_MGROUP(STATIC)
DECLARE_MTYPE(STATIC_ROUTE);
DECLARE_MTYPE(STATIC_NEXTHOP); DECLARE_MTYPE(STATIC_NEXTHOP);
DECLARE_MTYPE(STATIC_PATH); DECLARE_MTYPE(STATIC_PATH);

View File

@ -35,7 +35,7 @@
#include "static_zebra.h" #include "static_zebra.h"
#include "static_debug.h" #include "static_debug.h"
DEFINE_MTYPE_STATIC(STATIC, STATIC_ROUTE, "Static Route Info"); DEFINE_MTYPE(STATIC, STATIC_ROUTE, "Static Route Info");
DEFINE_MTYPE(STATIC, STATIC_PATH, "Static Path"); DEFINE_MTYPE(STATIC, STATIC_PATH, "Static Path");
/* Install static path into rib. */ /* Install static path into rib. */

View File

@ -38,6 +38,10 @@ static void zebra_stable_node_cleanup(struct route_table *table,
struct static_nexthop *nh; struct static_nexthop *nh;
struct static_path *pn; struct static_path *pn;
struct static_route_info *si; struct static_route_info *si;
struct route_table *src_table;
struct route_node *src_node;
struct static_path *src_pn;
struct static_route_info *src_si;
si = node->info; si = node->info;
@ -51,6 +55,37 @@ static void zebra_stable_node_cleanup(struct route_table *table,
static_path_list_del(&si->path_list, pn); static_path_list_del(&si->path_list, pn);
XFREE(MTYPE_STATIC_PATH, pn); XFREE(MTYPE_STATIC_PATH, pn);
} }
/* clean up for dst table */
src_table = srcdest_srcnode_table(node);
if (src_table) {
/* This means the route_node is part of the top
* hierarchy and refers to a destination prefix.
*/
for (src_node = route_top(src_table); src_node;
src_node = route_next(src_node)) {
src_si = src_node->info;
frr_each_safe(static_path_list,
&src_si->path_list, src_pn) {
frr_each_safe(static_nexthop_list,
&src_pn->nexthop_list,
nh) {
static_nexthop_list_del(
&src_pn->nexthop_list,
nh);
XFREE(MTYPE_STATIC_NEXTHOP, nh);
}
static_path_list_del(&src_si->path_list,
src_pn);
XFREE(MTYPE_STATIC_PATH, src_pn);
}
XFREE(MTYPE_STATIC_ROUTE, src_node->info);
}
}
XFREE(MTYPE_STATIC_ROUTE, node->info);
} }
} }