Gleb Smirnoff wrote:
> 
>   Dear sirs,
> 
>   please take a look at the following problem. I've been
> successfully using the following code on STABLE and 5.1-RELEASE:
> 
>         struct route ro;
>         struct sockaddr_in *sin;
> 
>         bzero((caddr_t)&ro, sizeof(ro));
>         sin = (struct sockaddr_in *)&ro.ro_dst;
>         sin->sin_len = sizeof(*sin);
>         sin->sin_family = AF_INET;
>         sin->sin_addr = fle->r.r_dst;
>         rtalloc(&ro);

Most of the time, if you don't need a cloned route allocated, you can
just use rtalloc_ign(&ro, RTF_CLONING) to just get a reference to the
existing rtentry.  Not allocating a new cloned route saves work and
time for the rtalloc code.

>         if (ro.ro_rt != NULL) {
>                 struct rtentry *rt = ro.ro_rt;
> 
>                 /* here some read-only things are done with rt */

Maybe you do some nasty things to rt here?

>                 rtfree(ro.ro_rt);
>         }
> 
> But on CURRENT rtfree() causes panic. Here is backtrace:
...
> Does this mean that something is broken in CURRENT or I am doing something wrong?

rtalloc() and rtfree() are used quite often in the network code and
otherwise work fine.  The odds are high that you are doing something
wrong.

-- 
Andre
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to