From a5f36f6b0a4c2c6cd879d3e0d10572e86386a4db Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Sat, 13 Jul 2013 15:30:28 +0200 Subject: [PATCH] ifpps: release stats on exit The stack trace of valgrind --leak-check=full --show-reachable=yes ifpps \ -lpcd wlan0 showed that at exit members from stats are still reachable. They have been alloced through stats_alloc, but not freed. Signed-off-by: Daniel Borkmann --- ifpps.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ifpps.c b/ifpps.c index ec0d55b9..84744bab 100644 --- a/ifpps.c +++ b/ifpps.c @@ -201,6 +201,22 @@ static void stats_zero(struct ifstat *stats, int cpus) STATS_ZERO1(cpu_iow); } +#define STATS_RELEASE(member) \ + do { xfree(stats->member); } while (0) + +static void stats_release(struct ifstat *stats) +{ + STATS_RELEASE(irqs); + STATS_RELEASE(irqs_srx); + STATS_RELEASE(irqs_stx); + + STATS_RELEASE(cpu_user); + STATS_RELEASE(cpu_sys); + STATS_RELEASE(cpu_nice); + STATS_RELEASE(cpu_idle); + STATS_RELEASE(cpu_iow); +} + static int stats_proc_net_dev(const char *ifname, struct ifstat *stats) { int ret = -EINVAL; @@ -1373,6 +1389,10 @@ int main(int argc, char **argv) if (promisc) leave_promiscuous_mode(ifname, ifflags); + stats_release(&stats_old); + stats_release(&stats_new); + stats_release(&stats_delta); + xfree(ifname); return ret; } -- 2.11.4.GIT