From owner-svn-src-head@FreeBSD.ORG Sun Mar 7 15:09:00 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C32211065673; Sun, 7 Mar 2010 15:09:00 +0000 (UTC) (envelope-from brucec@muon.cran.org.uk) Received: from muon.cran.org.uk (unknown [IPv6:2001:470:1f09:679::1]) by mx1.freebsd.org (Postfix) with ESMTP id 8F2808FC15; Sun, 7 Mar 2010 15:09:00 +0000 (UTC) Received: by muon.cran.org.uk (Postfix, from userid 1000) id 8B80E9222; Sun, 7 Mar 2010 15:09:10 +0000 (UTC) Date: Sun, 7 Mar 2010 15:09:10 +0000 From: Bruce Cran To: "Bjoern A. Zeeb" Message-ID: <20100307150909.GA6554@muon.cran.org.uk> References: <201003062127.o26LRQ6J042057@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201003062127.o26LRQ6J042057@svn.freebsd.org> User-Agent: Mutt/1.5.18 (2008-05-17) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r204808 - head/sys/net X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Mar 2010 15:09:00 -0000 On Sat, Mar 06, 2010 at 09:27:26PM +0000, Bjoern A. Zeeb wrote: > Author: bz > Date: Sat Mar 6 21:27:26 2010 > New Revision: 204808 > URL: http://svn.freebsd.org/changeset/base/204808 > > Log: > Introduce a function rn_detachhead() that will free the > radix table root nodes. This is only needed (and available) > in the virtualization case to free the resources when tearing > down a virtual network stack. > > Sponsored by: ISPsystem > Reviewed by: julian, zec > MFC after: 5 days > > Modified: > head/sys/net/radix.c > head/sys/net/radix.h > > Modified: head/sys/net/radix.c > ============================================================================== > --- head/sys/net/radix.c Sat Mar 6 21:24:32 2010 (r204807) > +++ head/sys/net/radix.c Sat Mar 6 21:27:26 2010 (r204808) > @@ -1161,6 +1161,24 @@ rn_inithead(head, off) > return (1); > } > > +#ifdef VIMAGE > +int > +rn_detachhead(void **head) > +{ > + struct radix_node_head *rnh; > + > + KASSERT((head != NULL && *head != NULL), > + ("%s: head already freed", __func__)); > + rnh = *head; > + > + /* Free nodes. */ > + Free(rnh); > + > + *head = NULL; > + return (1); > +} > +#endif Is this sufficient to free all the memory? From what I can see, 'Free' is just freeing the pointer and not walking the tree to free the nodes too. I don't know if the memory allocation is being done differently, but I fixed the same issue on Windows by introducing a 'rn_free_subtree' function - I don't know if it's entirely correct but the code can be seen at http://www.bluestop.org/viewvc/repos/sctpDrv/net/radix.c?r1=24&r2=23&pathrev=24 I also found that rn_zeros wasn't being freed when the driver got unloaded. -- Bruce Cran