Fix LORs in in6?_leave_group()

r333175 updated the join_group functions, but not the leave_group ones.

Reviewed by:	sbruno
Sponsored by:	Limelight Networks
Differential Revision:	https://reviews.freebsd.org/D15393
This commit is contained in:
Stephen Hurd 2018-05-11 21:42:27 +00:00
parent 0de8041c8e
commit b69888c28f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=333505
2 changed files with 10 additions and 0 deletions

View File

@ -2501,6 +2501,8 @@ inp_leave_group(struct inpcb *inp, struct sockopt *sopt)
/*
* Begin state merge transaction at IGMP layer.
*/
in_pcbref(inp);
INP_WUNLOCK(inp);
IN_MULTI_LOCK();
if (is_final) {
@ -2531,6 +2533,9 @@ inp_leave_group(struct inpcb *inp, struct sockopt *sopt)
out_in_multi_locked:
IN_MULTI_UNLOCK();
INP_WLOCK(inp);
if (in_pcbrele_wlocked(inp))
return (ENXIO);
if (error)
imf_rollback(imf);

View File

@ -2381,6 +2381,8 @@ in6p_leave_group(struct inpcb *inp, struct sockopt *sopt)
/*
* Begin state merge transaction at MLD layer.
*/
in_pcbref(inp);
INP_WUNLOCK(inp);
IN6_MULTI_LOCK();
if (is_final) {
@ -2407,6 +2409,9 @@ in6p_leave_group(struct inpcb *inp, struct sockopt *sopt)
}
IN6_MULTI_UNLOCK();
INP_WLOCK(inp);
if (in_pcbrele_wlocked(inp))
return (ENXIO);
if (error)
im6f_rollback(imf);