]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: Cleanup msdp.mg on shutdown
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 3 Aug 2018 03:07:08 +0000 (23:07 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 3 Aug 2018 03:08:48 +0000 (23:08 -0400)
When shutting down PIM, ensure that hte pim->msdp.mg is cleaned up.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_msdp.c

index 391a0eebc1987f205c0bc9372559f2295bbf46bc..4910cb8b38085e1724bec0863abf6b5261a8b176 100644 (file)
@@ -1242,8 +1242,10 @@ static int pim_msdp_peer_comp(const void *p1, const void *p2)
 }
 
 /************************** Mesh group management **************************/
-static void pim_msdp_mg_free(struct pim_instance *pim, struct pim_msdp_mg *mg)
+static void pim_msdp_mg_free(struct pim_instance *pim)
 {
+       struct pim_msdp_mg *mg = pim->msdp.mg;
+
        /* If the mesh-group has valid member or src_ip don't delete it */
        if (!mg || mg->mbr_cnt || (mg->src_ip.s_addr != INADDR_ANY)) {
                return;
@@ -1258,8 +1260,7 @@ static void pim_msdp_mg_free(struct pim_instance *pim, struct pim_msdp_mg *mg)
        if (mg->mbr_list)
                list_delete_and_null(&mg->mbr_list);
 
-       XFREE(MTYPE_PIM_MSDP_MG, mg);
-       pim->msdp.mg = NULL;
+       XFREE(MTYPE_PIM_MSDP_MG, pim->msdp.mg);
 }
 
 static struct pim_msdp_mg *pim_msdp_mg_new(const char *mesh_group_name)
@@ -1299,7 +1300,7 @@ enum pim_msdp_err pim_msdp_mg_del(struct pim_instance *pim,
        mg->src_ip.s_addr = INADDR_ANY;
 
        /* free up the mesh-group */
-       pim_msdp_mg_free(pim, mg);
+       pim_msdp_mg_free(pim);
        return PIM_MSDP_ERR_NONE;
 }
 
@@ -1438,7 +1439,7 @@ enum pim_msdp_err pim_msdp_mg_mbr_del(struct pim_instance *pim,
 
        pim_msdp_mg_mbr_do_del(mg, mbr);
        /* if there are no references to the mg free it */
-       pim_msdp_mg_free(pim, mg);
+       pim_msdp_mg_free(pim);
 
        return PIM_MSDP_ERR_NONE;
 }
@@ -1475,7 +1476,7 @@ enum pim_msdp_err pim_msdp_mg_src_del(struct pim_instance *pim,
                mg->src_ip.s_addr = INADDR_ANY;
                pim_msdp_mg_src_do_del(pim);
                /* if there are no references to the mg free it */
-               pim_msdp_mg_free(pim, mg);
+               pim_msdp_mg_free(pim);
        }
        return PIM_MSDP_ERR_NONE;
 }
@@ -1598,6 +1599,8 @@ void pim_msdp_exit(struct pim_instance *pim)
 
        /* XXX: stop listener and delete all peer sessions */
 
+       pim_msdp_mg_free(pim);
+
        if (pim->msdp.peer_hash) {
                hash_clean(pim->msdp.peer_hash, NULL);
                hash_free(pim->msdp.peer_hash);