From owner-freebsd-doc@FreeBSD.ORG Mon Oct 17 17:51:44 2005 Return-Path: X-Original-To: freebsd-doc@freebsd.org Delivered-To: freebsd-doc@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 39A5A16A41F; Mon, 17 Oct 2005 17:51:44 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from mv.twc.weather.com (mv.twc.weather.com [65.212.71.225]) by mx1.FreeBSD.org (Postfix) with ESMTP id 73C8A43D4C; Mon, 17 Oct 2005 17:51:43 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from [10.50.41.234] (Not Verified[10.50.41.234]) by mv.twc.weather.com with NetIQ MailMarshal (v6, 0, 3, 8) id ; Mon, 17 Oct 2005 14:08:12 -0400 From: John Baldwin To: freebsd-doc@freebsd.org Date: Mon, 17 Oct 2005 13:53:11 -0400 User-Agent: KMail/1.8.2 References: <200510162150.j9GLoCAt040327@www.freebsd.org> In-Reply-To: <200510162150.j9GLoCAt040327@www.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-6" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200510171353.12772.jhb@freebsd.org> Cc: freebsd-gnats-submit@freebsd.org, David Leppik 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 List-Id: Documentation project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Oct 2005 17:51:44 -0000 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