Merge pull request #2850 from patrasar/Fix_2363

Fix pim_mroute_del crash while killing pimd
This commit is contained in:
Donald Sharp 2018-08-22 11:44:15 -04:00 committed by GitHub
commit 61929aa5f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 1 deletions

View File

@ -174,7 +174,16 @@ void pim_ifchannel_delete(struct pim_ifchannel *ch)
ifchannel list is empty before deleting upstream_del
ref count will take care of it.
*/
pim_upstream_del(pim_ifp->pim, ch->upstream, __PRETTY_FUNCTION__);
if (ch->upstream->ref_count > 0)
pim_upstream_del(pim_ifp->pim, ch->upstream,
__PRETTY_FUNCTION__);
else
zlog_warn("%s: Avoiding deletion of upstream with ref_count %d "
"from ifchannel(%s): %s", __PRETTY_FUNCTION__,
ch->upstream->ref_count, ch->interface->name,
ch->sg_str);
ch->upstream = NULL;
THREAD_OFF(ch->t_ifjoin_expiry_timer);

View File

@ -167,6 +167,8 @@ struct pim_upstream *pim_upstream_del(struct pim_instance *pim,
up->ref_count, up->flags,
up->channel_oil->oil_ref_count);
assert(up->ref_count > 0);
--up->ref_count;
if (up->ref_count >= 1)