On 21-10-10 12:45, Bret S. Lambert wrote:
> Is the patch something like the following?
Looks right; tested: fixes the bug.
Thanks!
+++chefren
> Index: if.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if.c,v
> retrieving revision 1.225
> diff -u -p -r1.225 if.c
> --- if.c 27 Aug 2010 17:08:01 -0000 1.225
> +++ if.c 21 Oct 2010 10:44:19 -0000
> @@ -161,7 +161,7 @@ RB_HEAD(ifaddr_items, ifaddr_item) ifadd
> RB_PROTOTYPE(ifaddr_items, ifaddr_item, ifai_entry, ifai_cmp);
> RB_GENERATE(ifaddr_items, ifaddr_item, ifai_entry, ifai_cmp);
>
> -TAILQ_HEAD(, ifg_group) ifg_head;
> +TAILQ_HEAD(, ifg_group) ifg_head = TAILQ_HEAD_INITIALIZER(ifg_head);
> LIST_HEAD(, if_clone) if_cloners = LIST_HEAD_INITIALIZER(if_cloners);
> int if_cloners_count;
>
> @@ -190,7 +190,7 @@ static int if_index = 0;
> int if_indexlim = 0;
> struct ifaddr **ifnet_addrs = NULL;
> struct ifnet **ifindex2ifnet = NULL;
> -struct ifnet_head ifnet;
> +struct ifnet_head ifnet = TAILQ_HEAD_INITIALIZER(ifnet);
> struct ifnet_head iftxlist = TAILQ_HEAD_INITIALIZER(iftxlist);
> struct ifnet *lo0ifp;
>
> @@ -443,10 +443,6 @@ void
> if_attach_common(struct ifnet *ifp)
> {
>
> - if (if_index == 0) {
> - TAILQ_INIT(&ifnet);
> - TAILQ_INIT(&ifg_head);
> - }
> TAILQ_INIT(&ifp->if_addrlist);
> ifp->if_addrhooks = malloc(sizeof(*ifp->if_addrhooks),
> M_TEMP, M_NOWAIT);