Page MenuHomeFreeBSD

D59112.id.diff
No OneTemporary

D59112.id.diff

diff --git a/sys/netinet/in_fib_algo.c b/sys/netinet/in_fib_algo.c
--- a/sys/netinet/in_fib_algo.c
+++ b/sys/netinet/in_fib_algo.c
@@ -582,13 +582,24 @@
return (FLM_SUCCESS);
}
+static int
+lradix4_free_route(struct radix_node *rn, void *arg)
+{
+ struct radix_head *head = arg;
+
+ rn_delete(rn->rn_key, rn->rn_mask, head);
+ return (0);
+}
+
static void
lradix4_destroy(void *_data)
{
struct lradix4_data *lr = (struct lradix4_data *)_data;
- if (lr->rnh != NULL)
+ if (lr->rnh != NULL) {
+ rn_walktree(&lr->rnh->rh, lradix4_free_route, &lr->rnh->rh);
rn_detachhead((void **)&lr->rnh);
+ }
if (lr->mem != NULL)
free(lr->mem, M_RTABLE);
free(lr, M_RTABLE);
diff --git a/sys/netinet6/in6_fib_algo.c b/sys/netinet6/in6_fib_algo.c
--- a/sys/netinet6/in6_fib_algo.c
+++ b/sys/netinet6/in6_fib_algo.c
@@ -129,7 +129,7 @@
struct rib_rtable_info rinfo;
uint32_t count;
void *mem;
-
+
lr = malloc(sizeof(struct lradix6_data), M_RTABLE, M_NOWAIT | M_ZERO);
if (lr == NULL || !rn_inithead((void **)&lr->rnh, OFF_LEN_INET6))
return (FLM_REBUILD);
@@ -150,13 +150,24 @@
return (FLM_SUCCESS);
}
+static int
+lradix6_free_route(struct radix_node *rn, void *arg)
+{
+ struct radix_head *head = arg;
+
+ rn_delete(rn->rn_key, rn->rn_mask, head);
+ return (0);
+}
+
static void
lradix6_destroy(void *_data)
{
struct lradix6_data *lr = (struct lradix6_data *)_data;
- if (lr->rnh != NULL)
+ if (lr->rnh != NULL) {
+ rn_walktree(&lr->rnh->rh, lradix6_free_route, &lr->rnh->rh);
rn_detachhead((void **)&lr->rnh);
+ }
if (lr->mem != NULL)
free(lr->mem, M_RTABLE);
free(lr, M_RTABLE);

File Metadata

Mime Type
text/plain
Expires
Thu, Sep 10, 6:39 PM (5 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38548864
Default Alt Text
D59112.id.diff (1 KB)

Event Timeline