summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim_instance.c4
-rw-r--r--pimd/pim_upstream.c5
2 files changed, 5 insertions, 4 deletions
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);
}