[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: interface groups



Henning Brauer <lists-openbsdtech@bsws.de> writes:

> * Philipp Buehler <pb@openbsd.org> [2004-06-22 10:06]:
> > +	TAILQ_FOREACH(ifgp, &ifp->if_groups, group_list) {
> > +			TAILQ_REMOVE(&ifp->if_groups, ifgp, group_list);
> 
> no... see manpage
> 
> NOTES
>      Trying to free a list in the following way is a common error:
> 
>            LIST_FOREACH(var, head, entry)
>                    free(var);
>            free(head);
> 
>      Since var is free'd, the FOREACH() macro refers to a pointer that may
>      have been reallocated already.  Proper code needs a second variable.
> 
>            for (var = LIST_FIRST(head); var != LIST_END(head); var = nxt) {
>                    nxt = LIST_NEXT(var, entry);
>                    free(var);
>            }
>            LIST_INIT(head);        /* to put the list back in order */

Stop giving bad advice. :)

while ((foo = TAILQ_FIRST(..)) != NULL) {
        TAILQ_REMOVE(foo ...);
        free(foo);
}

//art