Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/in_mcast.c
Show First 20 Lines • Show All 1,262 Lines • ▼ Show 20 Lines | if (error) { | ||||
CTR1(KTR_IGMPV3, "%s: failed to update source", __func__); | CTR1(KTR_IGMPV3, "%s: failed to update source", __func__); | ||||
goto out_inm_release; | goto out_inm_release; | ||||
} | } | ||||
out_inm_release: | out_inm_release: | ||||
if (error) { | if (error) { | ||||
CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); | CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); | ||||
IF_ADDR_WLOCK(ifp); | |||||
inm_release_deferred(inm); | inm_release_deferred(inm); | ||||
IF_ADDR_WUNLOCK(ifp); | |||||
} else { | } else { | ||||
*pinm = inm; | *pinm = inm; | ||||
} | } | ||||
IN_MULTI_LIST_UNLOCK(); | IN_MULTI_LIST_UNLOCK(); | ||||
return (error); | return (error); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 962 Lines • ▼ Show 20 Lines | |||||
out_inp_locked: | out_inp_locked: | ||||
INP_WUNLOCK(inp); | INP_WUNLOCK(inp); | ||||
out_inp_unlocked: | out_inp_unlocked: | ||||
IN_MULTI_UNLOCK(); | IN_MULTI_UNLOCK(); | ||||
if (is_new && imf) { | if (is_new && imf) { | ||||
if (imf->imf_inm != NULL) { | if (imf->imf_inm != NULL) { | ||||
IN_MULTI_LIST_LOCK(); | IN_MULTI_LIST_LOCK(); | ||||
IF_ADDR_WLOCK(ifp); | |||||
inm_release_deferred(imf->imf_inm); | inm_release_deferred(imf->imf_inm); | ||||
IF_ADDR_WUNLOCK(ifp); | |||||
IN_MULTI_LIST_UNLOCK(); | IN_MULTI_LIST_UNLOCK(); | ||||
} | } | ||||
ip_mfilter_free(imf); | ip_mfilter_free(imf); | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 801 Lines • Show Last 20 Lines |