Page MenuHomeFreeBSD

D18338.id51112.diff
No OneTemporary

D18338.id51112.diff

Index: sys/net/if.c
===================================================================
--- sys/net/if.c
+++ sys/net/if.c
@@ -1068,6 +1068,8 @@
CK_STAILQ_FOREACH(iter, &V_ifnet, if_link)
if (iter == ifp) {
CK_STAILQ_REMOVE(&V_ifnet, ifp, ifnet, if_link);
+ if (!vmove)
+ ifp->if_flags |= IFF_DYING;
found = 1;
break;
}
Index: sys/net/rtsock.c
===================================================================
--- sys/net/rtsock.c
+++ sys/net/rtsock.c
@@ -1566,7 +1566,7 @@
info.rti_info[RTAX_NETMASK] = rtsock_fix_netmask(rt_key(rt),
rt_mask(rt), &ss);
info.rti_info[RTAX_GENMASK] = 0;
- if (rt->rt_ifp) {
+ if (rt->rt_ifp && !(rt->rt_ifp->if_flags & IFF_DYING)) {
info.rti_info[RTAX_IFP] = rt->rt_ifp->if_addr->ifa_addr;
info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
if (rt->rt_ifp->if_flags & IFF_POINTOPOINT)
@@ -1921,9 +1921,11 @@
for (error = 0; error == 0 && i <= lim; i++) {
rnh = rt_tables_get_rnh(fib, i);
if (rnh != NULL) {
- RIB_RLOCK(rnh);
- error = rnh->rnh_walktree(&rnh->head,
+ RIB_RLOCK(rnh);
+ IFNET_RLOCK_NOSLEEP();
+ error = rnh->rnh_walktree(&rnh->head,
sysctl_dumpentry, &w);
+ IFNET_RLOCK_NOSLEEP();
RIB_RUNLOCK(rnh);
} else if (af != 0)
error = EAFNOSUPPORT;

File Metadata

Mime Type
text/plain
Expires
Fri, Feb 21, 6:32 PM (45 m, 45 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16759725
Default Alt Text
D18338.id51112.diff (1 KB)

Event Timeline