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

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