summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeale Ranns <neale.ranns@cisco.com>2018-04-24 02:05:04 -0700
committerChris Luke <chris_luke@comcast.com>2018-04-24 11:01:29 +0000
commitdf53f5fda277a035984f1de4474f0b58ae15b114 (patch)
tree073d1907b93bb01da7e9201a44938565d04cbc22
parent42c6599bf3057a7e8f4f00f5b6a9dd72af48d283 (diff)
mem-leak in stats handling (VPP-1250)
Change-Id: I55f978c84a56bc089e5657c528195b6c84409364 Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
-rw-r--r--src/vpp/stats/stats.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/vpp/stats/stats.c b/src/vpp/stats/stats.c
index 5787b9e14e9..fc4b905f982 100644
--- a/src/vpp/stats/stats.c
+++ b/src/vpp/stats/stats.c
@@ -363,6 +363,9 @@ exit:
return elts;
}
+/*
+ * Return a copy of the clients list.
+ */
vpe_client_registration_t *
get_clients_for_stat (u32 reg, u32 item)
{
@@ -381,10 +384,13 @@ get_clients_for_stat (u32 reg, u32 item)
registration = pool_elt_at_index (sm->stats_registrations[reg], p[0]);
vec_reset_length (clients);
- pool_foreach (client, registration->clients, (
- {
- vec_add1 (clients, *client);}
- ));
+
+ /* *INDENT-OFF* */
+ pool_foreach (client, registration->clients,
+ ({
+ vec_add1 (clients, *client);}
+ ));
+ /* *INDENT-ON* */
return clients;
}
@@ -608,6 +614,7 @@ static void
reg_prev = reg;
}
}
+ vec_free (clients);
#if STATS_DEBUG > 0
fformat (stdout, "%U\n", format_vnet_combined_counters, mp);
#endif
@@ -2355,6 +2362,7 @@ static void
continue;
}
}
+ vec_free (clients);
#if STATS_DEBUG > 0
fformat (stdout, "%U\n", format_vnet_simple_counters, mp);
@@ -2408,6 +2416,7 @@ vl_api_vnet_ip4_fib_counters_t_handler (vl_api_vnet_ip4_fib_counters_t * mp)
continue;
}
}
+ vec_free (clients);
if (reg_prev && vl_api_can_send_msg (reg_prev))
{
@@ -2457,6 +2466,7 @@ vl_api_vnet_ip4_nbr_counters_t_handler (vl_api_vnet_ip4_nbr_counters_t * mp)
continue;
}
}
+ vec_free (clients);
/* *INDENT-ON* */
if (reg_prev && vl_api_can_send_msg (reg_prev))
@@ -2507,6 +2517,8 @@ vl_api_vnet_ip6_fib_counters_t_handler (vl_api_vnet_ip6_fib_counters_t * mp)
continue;
}
}
+ vec_free (clients);
+
/* *INDENT-ON* */
if (reg_prev && vl_api_can_send_msg (reg_prev))
{
@@ -2556,6 +2568,8 @@ vl_api_vnet_ip6_nbr_counters_t_handler (vl_api_vnet_ip6_nbr_counters_t * mp)
continue;
}
}
+ vec_free (clients);
+
/* *INDENT-ON* */
if (reg_prev && vl_api_can_send_msg (reg_prev))
{