On Wed, Aug 19, 2015 at 01:13:59PM +0200, Martin Pieuchot wrote:
> Instead of asking for a reference in rtrequest1(9) simply pass NULL
> and let the function call rtfree(9) for us.
>
> rt_missmsg() does not need the route to be alive, so it's fine.
>
> Ok?
This is the diff that was done before in rev 1.134 and backed out
in rev 1.136 because it was wrong. I think a reference to rt storage
is still living in info.
bluhm
>
> Index: net/route.c
> ===================================================================
> RCS file: /cvs/src/sys/net/route.c,v
> retrieving revision 1.222
> diff -u -p -r1.222 route.c
> --- net/route.c 19 Aug 2015 10:42:37 -0000 1.222
> +++ net/route.c 19 Aug 2015 11:11:28 -0000
> @@ -566,15 +566,9 @@ rtdeletemsg(struct rtentry *rt, u_int ta
> info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
> info.rti_flags = rt->rt_flags;
> ifp = rt->rt_ifp;
> - error = rtrequest1(RTM_DELETE, &info, rt->rt_priority, &rt, tableid);
> -
> + error = rtrequest1(RTM_DELETE, &info, rt->rt_priority, NULL, tableid);
> rt_missmsg(RTM_DELETE, &info, info.rti_flags, ifp, error, tableid);
>
> - /* Adjust the refcount */
> - if (error == 0 && rt->rt_refcnt <= 0) {
> - rt->rt_refcnt++;
> - rtfree(rt);
> - }
> return (error);
> }
>