MFC 204402
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.
This commit is contained in:
parent
ca493fb650
commit
44520d2930
@ -759,22 +759,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…
x
Reference in New Issue
Block a user