]> git.proxmox.com Git - mirror_frr.git/commitdiff
isisd: Allow adjacency cleanup to free malloc'ed memory
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 4 Oct 2017 12:49:14 +0000 (08:49 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 4 Oct 2017 12:49:14 +0000 (08:49 -0400)
The `struct isis_adjacency` needs to free up memory
associated with the area_addrs ipv4_addrs and ipv6_addrs
lists.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
isisd/isis_adjacency.c
isisd/isis_adjacency.h
isisd/isis_pdu.c

index 8db6ef1f70baaa5669ff181f07e4de09fde6a40c..b8166092322220e28b2793e9de7b7f814b0bc475 100644 (file)
@@ -124,6 +124,14 @@ struct isis_adjacency *isis_adj_lookup_snpa(const u_char *ssnpa,
        return NULL;
 }
 
+/*
+ * Processing helper functions
+ */
+void isis_area_adj_del_addr(void *val)
+{
+       XFREE(MTYPE_ISIS_TMP, val);
+}
+
 void isis_delete_adj(void *arg)
 {
        struct isis_adjacency *adj = arg;
@@ -136,12 +144,18 @@ void isis_delete_adj(void *arg)
        /* remove from SPF trees */
        spftree_area_adj_del(adj->circuit->area, adj);
 
-       if (adj->area_addrs)
+       if (adj->area_addrs) {
+               adj->area_addrs->del = isis_area_adj_del_addr;
                list_delete(adj->area_addrs);
-       if (adj->ipv4_addrs)
+       }
+       if (adj->ipv4_addrs) {
+               adj->ipv4_addrs->del = isis_area_adj_del_addr;
                list_delete(adj->ipv4_addrs);
-       if (adj->ipv6_addrs)
+       }
+       if (adj->ipv6_addrs) {
+               adj->ipv6_addrs->del = isis_area_adj_del_addr;
                list_delete(adj->ipv6_addrs);
+       }
 
        XFREE(MTYPE_ISIS_ADJACENCY, adj);
        return;
index cdcd5cf74abe68a27194af277e2c3ba97314ceac..efb242ef92627dbafe5a6a8b5c535ef3c5737e47 100644 (file)
@@ -108,4 +108,5 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,
 void isis_adj_build_neigh_list(struct list *adjdb, struct list *list);
 void isis_adj_build_up_list(struct list *adjdb, struct list *list);
 
+void isis_area_adj_del_addr(void *val);
 #endif /* ISIS_ADJACENCY_H */
index 4db614d09a6994235f8fe62d11c8464cac0920b8..5aafda5cdb35c49b7fd9b9f38d7daefb64b72f0c 100644 (file)
@@ -268,14 +268,6 @@ static int lsp_authentication_check(struct stream *stream,
        return retval;
 }
 
-/*
- * Processing helper functions
- */
-static void del_addr(void *val)
-{
-       XFREE(MTYPE_ISIS_TMP, val);
-}
-
 static void tlvs_to_adj_area_addrs(struct tlvs *tlvs,
                                   struct isis_adjacency *adj)
 {
@@ -283,7 +275,7 @@ static void tlvs_to_adj_area_addrs(struct tlvs *tlvs,
        struct area_addr *area_addr, *malloced;
 
        if (adj->area_addrs) {
-               adj->area_addrs->del = del_addr;
+               adj->area_addrs->del = isis_area_adj_del_addr;
                list_delete(adj->area_addrs);
        }
        adj->area_addrs = list_new();
@@ -324,7 +316,7 @@ static void tlvs_to_adj_ipv4_addrs(struct tlvs *tlvs,
        struct in_addr *ipv4_addr, *malloced;
 
        if (adj->ipv4_addrs) {
-               adj->ipv4_addrs->del = del_addr;
+               adj->ipv4_addrs->del = isis_area_adj_del_addr;
                list_delete(adj->ipv4_addrs);
        }
        adj->ipv4_addrs = list_new();
@@ -345,7 +337,7 @@ static void tlvs_to_adj_ipv6_addrs(struct tlvs *tlvs,
        struct in6_addr *ipv6_addr, *malloced;
 
        if (adj->ipv6_addrs) {
-               adj->ipv6_addrs->del = del_addr;
+               adj->ipv6_addrs->del = isis_area_adj_del_addr;
                list_delete(adj->ipv6_addrs);
        }
        adj->ipv6_addrs = list_new();