diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c index b2971e5f1feb..e7ff434f4b2f 100644 --- a/pimd/pim_ifchannel.c +++ b/pimd/pim_ifchannel.c @@ -258,7 +258,7 @@ void pim_ifchannel_delete_all(struct interface *ifp) } } -static void delete_on_noinfo(struct pim_ifchannel *ch) +void delete_on_noinfo(struct pim_ifchannel *ch) { if (ch->local_ifmembership == PIM_IFMEMBERSHIP_NOINFO && ch->ifjoin_state == PIM_IFJOIN_NOINFO diff --git a/pimd/pim_ifchannel.h b/pimd/pim_ifchannel.h index 425622b79ed3..7ec8191e5687 100644 --- a/pimd/pim_ifchannel.h +++ b/pimd/pim_ifchannel.h @@ -173,4 +173,5 @@ int pim_ifchannel_compare(const struct pim_ifchannel *ch1, const struct pim_ifchannel *ch2); unsigned int pim_ifchannel_hash_key(const void *arg); +void delete_on_noinfo(struct pim_ifchannel *ch); #endif /* PIM_IFCHANNEL_H */ diff --git a/pimd/pim_join.c b/pimd/pim_join.c index f54d5bf9bfe4..2766a6d2b51e 100644 --- a/pimd/pim_join.c +++ b/pimd/pim_join.c @@ -350,8 +350,11 @@ int pim_joinprune_recv(struct interface *ifp, struct pim_neighbor *neigh, == PIM_IFJOIN_PRUNE_PENDING_TMP) THREAD_OFF( child->t_ifjoin_prune_pending_timer); + THREAD_OFF( + child->t_ifjoin_expiry_timer); PIM_IF_FLAG_UNSET_S_G_RPT(child->flags); child->ifjoin_state = PIM_IFJOIN_NOINFO; + delete_on_noinfo(child); } }