Page MenuHomeFreeBSD

D55599.id182852.diff
No OneTemporary

D55599.id182852.diff

diff --git a/sys/netinet6/in6.h b/sys/netinet6/in6.h
--- a/sys/netinet6/in6.h
+++ b/sys/netinet6/in6.h
@@ -690,6 +690,7 @@
struct sockaddr_in6 *sin6);
void in6_sin6_2_sin_in_sock(struct sockaddr *nam);
extern void addrsel_policy_init(void);
+extern void addrsel_policy_destroy(void);
#define satosin6(sa) ((struct sockaddr_in6 *)(sa))
#define sin6tosa(sin6) ((struct sockaddr *)(sin6))
diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c
--- a/sys/netinet6/in6_src.c
+++ b/sys/netinet6/in6_src.c
@@ -137,6 +137,7 @@
static struct in6_addrpolicy *lookup_addrsel_policy(struct sockaddr_in6 *);
static void init_policy_queue(void);
+static void destroy_policy_queue(void);
static int add_addrsel_policyent(struct in6_addrpolicy *);
static int delete_addrsel_policyent(struct in6_addrpolicy *);
static int walk_addrsel_policy(int (*)(struct in6_addrpolicy *, void *),
@@ -903,6 +904,14 @@
ADDRSEL_SXLOCK_INIT();
}
+void
+addrsel_policy_destroy(void)
+{
+
+ destroy_policy_queue();
+ /* TODO: Perform matching destruction of locks elsewhere. */
+}
+
static struct in6_addrpolicy *
lookup_addrsel_policy(struct sockaddr_in6 *key)
{
@@ -999,6 +1008,17 @@
TAILQ_INIT(&V_addrsel_policytab);
}
+static void
+destroy_policy_queue(void)
+{
+ struct addrsel_policyent *pol, *tpol;
+
+ TAILQ_FOREACH_SAFE(pol, &V_addrsel_policytab, ape_entry, tpol) {
+ TAILQ_REMOVE(&V_addrsel_policytab, pol, ape_entry);
+ free(pol, M_IFADDR);
+ }
+}
+
static int
add_addrsel_policyent(struct in6_addrpolicy *newpolicy)
{
diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c
--- a/sys/netinet6/ip6_input.c
+++ b/sys/netinet6/ip6_input.c
@@ -398,6 +398,7 @@
frag6_destroy();
nd6_destroy();
+ addrsel_policy_destroy();
in6_ifattach_destroy();
hashdestroy(V_in6_ifaddrhashtbl, M_IFADDR, V_in6_ifaddrhmask);

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 10, 12:45 AM (7 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40514895
Default Alt Text
D55599.id182852.diff (1 KB)

Event Timeline