diff --git a/pimd/pim_instance.c b/pimd/pim_instance.c index bf8d05d1e1..c592a2c047 100644 --- a/pimd/pim_instance.c +++ b/pimd/pim_instance.c @@ -44,10 +44,10 @@ static void pim_instance_terminate(struct pim_instance *pim) if (pim->static_routes) list_delete_and_null(&pim->static_routes); - pim_rp_free(pim); - pim_upstream_terminate(pim); + pim_rp_free(pim); + /* Traverse and cleanup rpf_hash */ if (pim->rpf_hash) { hash_clean(pim->rpf_hash, (void *)pim_rp_list_hash_clean); diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index 0728c9490b..4adfde6775 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -1534,12 +1534,13 @@ unsigned int pim_upstream_hash_key(void *arg) void pim_upstream_terminate(struct pim_instance *pim) { - struct listnode *node, *nnode; struct pim_upstream *up; if (pim->upstream_list) { - for (ALL_LIST_ELEMENTS(pim->upstream_list, node, nnode, up)) + while (pim->upstream_list->count) { + up = listnode_head(pim->upstream_list); pim_upstream_del(pim, up, __PRETTY_FUNCTION__); + } list_delete_and_null(&pim->upstream_list); }