Free radix mask entries on main radix destroy.

This is temporary commit to be merged to 10.
Other approach (like hash table) should be used
to store different masks.

PR:		194078
Submitted by:	Rumen Telbizov
MFC after:	3 days
This commit is contained in:
Alexander V. Chernikov 2014-10-01 21:24:58 +00:00
parent 852a0932c1
commit 8b1af054e8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=272385

View File

@ -1178,6 +1178,18 @@ rn_inithead(void **head, int off)
return (1);
}
static int
rn_freeentry(struct radix_node *rn, void *arg)
{
struct radix_node_head * const rnh = arg;
struct radix_node *x;
x = (struct radix_node *)rn_delete(rn + 2, NULL, rnh);
if (x != NULL)
Free(x);
return (0);
}
int
rn_detachhead(void **head)
{
@ -1188,6 +1200,7 @@ rn_detachhead(void **head)
rnh = *head;
rn_walktree(rnh->rnh_masks, rn_freeentry, rnh->rnh_masks);
rn_detachhead_internal((void **)&rnh->rnh_masks);
rn_detachhead_internal(head);
return (1);