diff options
| author | Jafar Al-Gharaibeh <jafar@atcorp.com> | 2025-04-08 10:19:33 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-08 10:19:33 -0500 |
| commit | 3510904f1da61afa6e2f5375f9bcf9ee2c260f90 (patch) | |
| tree | 32abef641d98159b7543b816e3c5250b79710df6 | |
| parent | 4d18be4fafee9023daa6935beb0e36c96f1d97ea (diff) | |
| parent | 521b58945ca5c8c75ccdb1f7f1cb9e2eb10ab83f (diff) | |
Merge pull request #18526 from donaldsharp/pim_leakage
pimd: Fix memory leak on shutdown
| -rw-r--r-- | pimd/pim_iface.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 75c556a5d7..86dc826378 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -195,8 +195,17 @@ void pim_if_delete(struct interface *ifp) assert(pim_ifp); pim_ifp->pim->mcast_if_count--; - if (pim_ifp->gm_join_list) + if (pim_ifp->gm_join_list) { pim_if_gm_join_del_all(ifp); + /* + * Sometimes gm_join_del_all does not delete them all + * and as such it's not actually freed. Let's + * just clean this up if it wasn't to prevent + * the problem. + */ + if (pim_ifp->gm_join_list) + list_delete(&pim_ifp->gm_join_list); + } if (pim_ifp->static_group_list) pim_if_static_group_del_all(ifp); @@ -1437,10 +1446,8 @@ int pim_if_gm_join_del(struct interface *ifp, pim_addr group_addr, } listnode_delete(pim_ifp->gm_join_list, ij); gm_join_free(ij); - if (listcount(pim_ifp->gm_join_list) < 1) { + if (listcount(pim_ifp->gm_join_list) < 1) list_delete(&pim_ifp->gm_join_list); - pim_ifp->gm_join_list = 0; - } return 0; } |
