Use reference counting instead of locking to secure an address while
that address is being used to generate temporary IPv6 address. This approach is sufficient and avoids recursive locking. MFC after: 3 days
This commit is contained in:
parent
443e752d97
commit
c1752bcd65
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=204402
@ -764,22 +764,25 @@ regen_tmpaddr(struct in6_ifaddr *ia6)
|
||||
*/
|
||||
if (!IFA6_IS_DEPRECATED(it6))
|
||||
public_ifa6 = it6;
|
||||
|
||||
if (public_ifa6 != NULL)
|
||||
ifa_ref(&public_ifa6->ia_ifa);
|
||||
}
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
|
||||
if (public_ifa6 != NULL) {
|
||||
int e;
|
||||
|
||||
if ((e = in6_tmpifadd(public_ifa6, 0, 0)) != 0) {
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
ifa_free(&public_ifa6->ia_ifa);
|
||||
log(LOG_NOTICE, "regen_tmpaddr: failed to create a new"
|
||||
" tmp addr,errno=%d\n", e);
|
||||
return (-1);
|
||||
}
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
ifa_free(&public_ifa6->ia_ifa);
|
||||
return (0);
|
||||
}
|
||||
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user