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

Reply via email to