The man page describing sys/queue.h include sample code which is written in a way that suggests that the *_REMOVE macros free memory. For example: while (head.lh_first != NULL) /* Delete. */ LIST_REMOVE(head.lh_first, entries); As a general purpose example of how to clear a LIST, this is misleading. Especially for all the kids today whose primary language is Java, C#, or Objective-C. (Sadly, I've become one of those kids :-) ) FreeBSD's current man page is more verbose: /* TailQ Deletion. */ > > while (!TAILQ_EMPTY(&head)) { > > n1 = TAILQ_FIRST(&head); > > TAILQ_REMOVE(&head, n1, entries); > > free(n1); > > } > > /* Faster TailQ Deletion. */ > > n1 = TAILQ_FIRST(&head); > > while (n1 != NULL) { > > n2 = TAILQ_NEXT(n1, entries); > > free(n1); > > n1 = n2; > > } > > TAILQ_INIT(&head); (Thanks to John Baldwin for pointing the FreeBSD version out to me.)
*** This bug has been marked as a duplicate of 1481 ***
Subject: Re: Memory leak in sample code for LIST_, TAILQ_, and CIRCLEQ_REMOVE Should I create a bug that there is no documentation for libc/misc/sys/queue.h, or is there someone else who mantains that code? David jakub at redhat dot com wrote: > ------- Additional Comments From jakub at redhat dot com 2005-10-20 16:19 ------- > > > *** This bug has been marked as a duplicate of 1481 *** >
You can file an enhancement bug on the manual that the header and its macros should be documented. But the most effective thing will be to contribute some documentation to the manual. This is far from the highest priority for improving the libc manual, and there is nearly no volunteer time available for working on the manual.