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:
Qing Li 2010-02-27 07:12:25 +00:00
parent 443e752d97
commit c1752bcd65
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=204402

View File

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