Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet6/in6_mcast.c
Show First 20 Lines • Show All 2,464 Lines • ▼ Show 20 Lines | if (error) | ||||
im6f_rollback(imf); | im6f_rollback(imf); | ||||
else | else | ||||
im6f_commit(imf); | im6f_commit(imf); | ||||
im6f_reap(imf); | im6f_reap(imf); | ||||
if (is_final) { | if (is_final) { | ||||
/* Remove the gap in the membership array. */ | /* Remove the gap in the membership array. */ | ||||
KASSERT(RB_EMPTY(&imf->im6f_sources), | |||||
("%s: im6f_sources not empty", __func__)); | |||||
for (++idx; idx < imo->im6o_num_memberships; ++idx) { | for (++idx; idx < imo->im6o_num_memberships; ++idx) { | ||||
imo->im6o_membership[idx-1] = imo->im6o_membership[idx]; | imo->im6o_membership[idx - 1] = imo->im6o_membership[idx]; | ||||
imo->im6o_mfilters[idx-1] = imo->im6o_mfilters[idx]; | imo->im6o_mfilters[idx - 1] = imo->im6o_mfilters[idx]; | ||||
} | } | ||||
im6f_init(&imo->im6o_mfilters[idx - 1], MCAST_UNDEFINED, | |||||
MCAST_EXCLUDE); | |||||
imo->im6o_num_memberships--; | imo->im6o_num_memberships--; | ||||
} | } | ||||
out_in6p_locked: | out_in6p_locked: | ||||
INP_WUNLOCK(inp); | INP_WUNLOCK(inp); | ||||
return (error); | return (error); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 511 Lines • Show Last 20 Lines |