This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug manual/1506] New: Memory leak in sample code for LIST_, TAILQ_, and CIRCLEQ_REMOVE


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]