[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: interface groups
- To: tech_(_at_)_openbsd_(_dot_)_org
- Subject: Re: interface groups
- From: Henning Brauer <lists-openbsdtech_(_at_)_bsws_(_dot_)_de>
- Date: Tue, 22 Jun 2004 22:26:09 -0600
- Mail-followup-to: tech_(_at_)_openbsd_(_dot_)_org
* Artur Grabowski <art_(_at_)_blahonga_(_dot_)_org> [2004-06-22 21:34]:
> Henning Brauer <lists-openbsdtech_(_at_)_bsws_(_dot_)_de> writes:
>
> > * Philipp Buehler <pb_(_at_)_openbsd_(_dot_)_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);
> }
the manpage example is bad for draining the entire queue.
the point however is that TAILQ_REMOVE in a TAILQ_FOREACH loop is
going to bomb out.
--
http://2suck.net/hhwl.html - http://www.bsws.de/
Unix is very simple, but it takes a genius to understand the simplicity.
(Dennis Ritchie)
Visit your host, monkey.org