Certain consumers of rtalloc like gif(4) and if_stf(4) lookup the

route and once they are done with it, call rtfree().  rtfree() should
only be used when we are certain we hold the last reference to the
route.  This bug results in console messages like the following:

rtfree: 0xc40f7000 has 1 refs

This patch switches the rtfree() to use RTFREE_LOCKED() instead,
which should handle the reference counting on the route better.

Approved by:	re@ (gnn)
Reviewed by:	bms
Reported by:	many via net@ and current@
Tested by:	many
This commit is contained in:
Christian S.J. Peron 2007-09-23 17:50:17 +00:00
parent 087aa087d5
commit bc60490a88
2 changed files with 4 additions and 4 deletions

View File

@ -607,10 +607,10 @@ stf_checkaddr4(sc, in, inifp)
(u_int32_t)ntohl(sin.sin_addr.s_addr));
#endif
if (rt)
rtfree(rt);
RTFREE_LOCKED(rt);
return -1;
}
rtfree(rt);
RTFREE_LOCKED(rt);
}
return 0;

View File

@ -374,10 +374,10 @@ gif_validate4(const struct ip *ip, struct gif_softc *sc, struct ifnet *ifp)
(u_int32_t)ntohl(sin.sin_addr.s_addr));
#endif
if (rt)
rtfree(rt);
RTFREE_LOCKED(rt);
return 0;
}
rtfree(rt);
RTFREE_LOCKED(rt);
}
return 32 * 2;