From owner-freebsd-doc@FreeBSD.ORG Mon Oct 17 18:00:22 2005 Return-Path: X-Original-To: freebsd-doc@hub.freebsd.org Delivered-To: freebsd-doc@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DEC2016A421 for ; Mon, 17 Oct 2005 18:00:22 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id C775843D5A for ; Mon, 17 Oct 2005 18:00:20 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j9HI0KkS088384 for ; Mon, 17 Oct 2005 18:00:20 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j9HI0KKS088383; Mon, 17 Oct 2005 18:00:20 GMT (envelope-from gnats) Date: Mon, 17 Oct 2005 18:00:20 GMT Message-Id: <200510171800.j9HI0KKS088383@freefall.freebsd.org> To: freebsd-doc@FreeBSD.org From: John Baldwin Cc: Subject: Re: docs/87548: LIST_*, TAILQ_* man pages include memory leak in sample code X-BeenThere: freebsd-doc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: John Baldwin List-Id: Documentation project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Oct 2005 18:00:23 -0000 The following reply was made to PR docs/87548; it has been noted by GNATS. From: John Baldwin To: freebsd-doc@freebsd.org Cc: David Leppik , freebsd-gnats-submit@freebsd.org Subject: Re: docs/87548: LIST_*, TAILQ_* man pages include memory leak in sample code Date: Mon, 17 Oct 2005 13:53:11 -0400 On Sunday 16 October 2005 05:50 pm, David Leppik wrote: > >Number: 87548 > >Category: docs > >Synopsis: LIST_*, TAILQ_* man pages include memory leak in sample > > code Confidential: no > >Severity: non-critical > >Priority: low > >Responsible: freebsd-doc > >State: open > >Quarter: > >Keywords: > >Date-Required: > >Class: doc-bug > >Submitter-Id: current-users > >Arrival-Date: Sun Oct 16 22:00:27 GMT 2005 > >Closed-Date: > >Last-Modified: > >Originator: David Leppik > >Release: None (old BSD code--see below) > >Organization: > > Vocal Laboratories > > >Environment: > >Description: > > I've seen this on Mac OS X and Linux, so this probably affects FreeBSD as > well. > > The man page for TAILQ_INSERT, TAILQ_REMOVE, etc. have the following sample > code: > > while (head.tqh_first != NULL) > TAILQ_REMOVE(&head, head.tqh_first, entries); > > I was so shocked that I checked queue.h and sure enough, TAILQ_REMOVE does > not deallocate the queue entry (nor should it.) The same is true for the > other structures mentioned in this man page. > > >How-To-Repeat: > > > >Fix: > > I'm just a lowly Java programmer, but I think the fix is: > > while (head.tqh_first != NULL) { > np = head.tqh_first; > TAILQ_REMOVE(&head, np, entries); > free(np); > } > Well, it should be something like: while (!TAILQ_EMPTY(&head)) { np = TAILQ_FIRST(&head); TAILQ_REMOVE(&head, np, entries); free(np); } And actually, on my machine here running current this is what the examples look like: /* 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); Which version of FreeBSD are you seeing the memory leak in? -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org