summaryrefslogtreecommitdiff
path: root/pimd/pim_jp_agg.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-03-16 15:56:54 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-03-16 19:00:42 -0400
commit7eb9068901571e0dcd23ce887bdc3e018683f298 (patch)
tree90260464061167437d5e773442c959c94bba09b6 /pimd/pim_jp_agg.c
parentbc72292aeb24d161e634c0b9dc0df072dd882faf (diff)
pimd: Cleanup ref counting
pim_jp_agg list should not ref count pim_upstream as that the deletion of pim_upstream deletion should remove the pim_upstream from the j/p agg list. Cleanup a memory leag of jag Make comparison of js cleaner in add_group Move THREAD_OFF to before the neighbor find. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_jp_agg.c')
-rw-r--r--pimd/pim_jp_agg.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/pimd/pim_jp_agg.c b/pimd/pim_jp_agg.c
index eb13ebf31b..29faace322 100644
--- a/pimd/pim_jp_agg.c
+++ b/pimd/pim_jp_agg.c
@@ -51,9 +51,6 @@ pim_jp_agg_src_free (struct pim_jp_sources *js)
* pick this shit back up when the
* nbr comes back alive
*/
-
- up = pim_upstream_del (up, __PRETTY_FUNCTION__);
-
if (up)
join_timer_start(js->up);
XFREE (MTYPE_PIM_JP_AGG_SOURCE, js);
@@ -113,8 +110,8 @@ pim_jp_agg_clear_group (struct list *group)
{
for (ALL_LIST_ELEMENTS(jag->sources, snode, snnode, js))
{
- pim_upstream_del (js->up, __PRETTY_FUNCTION__);
listnode_delete(jag->sources, js);
+ js->up = NULL;
XFREE(MTYPE_PIM_JP_AGG_SOURCE, js);
}
jag->sources = NULL;
@@ -171,7 +168,7 @@ pim_jp_agg_remove_group (struct list *group, struct pim_upstream *up)
if (js)
{
- pim_upstream_del (up, __PRETTY_FUNCTION__);
+ js->up = NULL;
listnode_delete(jag->sources, js);
XFREE(MTYPE_PIM_JP_AGG_SOURCE, js);
}
@@ -179,8 +176,11 @@ pim_jp_agg_remove_group (struct list *group, struct pim_upstream *up)
if (jag->sources->count == 0)
{
list_delete(jag->sources);
+ jag->sources = NULL;
listnode_delete(group, jag);
+ XFREE(MTYPE_PIM_JP_AGG_GROUP, jag);
}
+
}
int
@@ -275,14 +275,13 @@ pim_jp_agg_add_group (struct list *group, struct pim_upstream *up, bool is_join)
for (ALL_LIST_ELEMENTS(jag->sources, node, nnode, js))
{
- if (js->up->sg.src.s_addr == up->sg.src.s_addr)
+ if (js->up == up)
break;
}
if (!js)
{
js = XCALLOC(MTYPE_PIM_JP_AGG_SOURCE, sizeof (struct pim_jp_sources));
- pim_upstream_ref (up, 0);
js->up = up;
js->is_join = is_join;
listnode_add_sort (jag->sources, js);