From: Donald Sharp Date: Fri, 3 Aug 2018 03:07:08 +0000 (-0400) Subject: pimd: Cleanup msdp.mg on shutdown X-Git-Tag: frr-6.1-dev~100^2~2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=822d3c858c22e1dd5b270f8f443de5897c65a842;p=matthieu%2Ffrr.git pimd: Cleanup msdp.mg on shutdown When shutting down PIM, ensure that hte pim->msdp.mg is cleaned up. Signed-off-by: Donald Sharp --- diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c index 391a0eebc1..4910cb8b38 100644 --- a/pimd/pim_msdp.c +++ b/pimd/pim_msdp.c @@ -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);