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:
Qing Li 2010-03-08 21:30:12 +00:00
parent ca493fb650
commit 44520d2930

View File

@ -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);
}