On Sun, 7 Mar 2010, Bruce Cran wrote:

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 <left,root,right> 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.

You will notice that it's not called from anywhere yet;)

I have another dozen of patches to fix various places and free things.
Freeing of the tree is (will be) done from route.c (from my memory).

I am just flushing the "easy" ones from my patch queue while slowly
reaching timeout for the others that I had sent out for review.
In case you want to have a look at the complete set send me a mail to
bz@ and I'll forward you the remaining set.

/bz

--
Bjoern A. Zeeb         It will not break if you know what you are doing.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to