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

Reply via email to