This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug manual/1506] New: Memory leak in sample code for LIST_, TAILQ_, and CIRCLEQ_REMOVE
- From: "dleppik at vocalabs dot com" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sources dot redhat dot com
- Date: 20 Oct 2005 16:14:44 -0000
- Subject: [Bug manual/1506] New: Memory leak in sample code for LIST_, TAILQ_, and CIRCLEQ_REMOVE
- Reply-to: sourceware-bugzilla at sourceware dot org
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.)
--
Summary: Memory leak in sample code for LIST_, TAILQ_, and
CIRCLEQ_REMOVE
Product: glibc
Version: unspecified
Status: NEW
Severity: minor
Priority: P2
Component: manual
AssignedTo: roland at gnu dot org
ReportedBy: dleppik at vocalabs dot com
CC: glibc-bugs at sources dot redhat dot com
http://sourceware.org/bugzilla/show_bug.cgi?id=1506
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.