summaryrefslogtreecommitdiff
path: root/zebra/interface.c
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2016-11-01 18:57:53 -0200
committerRenato Westphal <renato@opensourcerouting.org>2016-11-28 16:15:27 -0200
commit58ac32e2d598b5dc45fa05b7a8a85b107571d697 (patch)
treef55826dc4efaec046bd339e19bcfb13cdf672ae2 /zebra/interface.c
parent0c6262ed6a2941c063aa2cf40107ef6b45d8628a (diff)
zebra/lib: plug several memleaks
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'zebra/interface.c')
-rw-r--r--zebra/interface.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/zebra/interface.c b/zebra/interface.c
index b87f61f920..422368852d 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -59,6 +59,20 @@ const char *rtadv_pref_strs[] = { "medium", "high", "INVALID", "low", 0 };
static void if_down_del_nbr_connected (struct interface *ifp);
+static void
+zebra_if_node_destroy (route_table_delegate_t *delegate,
+ struct route_table *table, struct route_node *node)
+{
+ if (node->info)
+ list_delete (node->info);
+ route_node_destroy (delegate, table, node);
+}
+
+route_table_delegate_t zebra_if_table_delegate = {
+ .create_node = route_node_create,
+ .destroy_node = zebra_if_node_destroy
+};
+
/* Called when new interface is added. */
static int
if_zebra_new_hook (struct interface *ifp)
@@ -101,7 +115,7 @@ if_zebra_new_hook (struct interface *ifp)
#endif /* HAVE_RTADV */
/* Initialize installed address chains tree. */
- zebra_if->ipv4_subnets = route_table_init ();
+ zebra_if->ipv4_subnets = route_table_init_with_delegate (&zebra_if_table_delegate);
ifp->info = zebra_if;