From 913b87306642a1c2d59431e4d0639c7a8399808f Mon Sep 17 00:00:00 2001 From: Chaoyu Jin Date: Tue, 8 Aug 2017 13:36:23 -0700 Subject: [PATCH] Fix memory leaks found in policer code. 2nd commit is to fix style failures. 3rd commit is to remove unneccesary change based on review comment. Change-Id: I4d54d25c27e037b9d0438f8af416cf113763dc6d Signed-off-by: Chaoyu Jin --- src/vnet/policer/policer.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/vnet/policer/policer.c b/src/vnet/policer/policer.c index cd754e29be9..5a7b7711661 100644 --- a/src/vnet/policer/policer.c +++ b/src/vnet/policer/policer.c @@ -33,13 +33,26 @@ policer_add_del (vlib_main_t * vm, if (is_add == 0) { + /* free policer config and template */ if (p == 0) { vec_free (name); return clib_error_return (0, "No such policer configuration"); } + pool_put_index (pm->configs, p[0]); + pool_put_index (pm->policer_templates, p[0]); hash_unset_mem (pm->policer_config_by_name, name); + + /* free policer */ + p = hash_get_mem (pm->policer_index_by_name, name); + if (p == 0) + { + vec_free (name); + return clib_error_return (0, "No such policer"); + } + pool_put_index (pm->policers, p[0]); hash_unset_mem (pm->policer_index_by_name, name); + vec_free (name); return 0; } @@ -500,6 +513,27 @@ VLIB_CLI_COMMAND (show_policer_command, static) = { }; /* *INDENT-ON* */ +static clib_error_t * +show_policer_pools_command_fn (vlib_main_t * vm, + unformat_input_t * input, + vlib_cli_command_t * cmd) +{ + vnet_policer_main_t *pm = &vnet_policer_main; + + vlib_cli_output (vm, "pool sizes: configs=%d templates=%d policers=%d", + pool_elts (pm->configs), + pool_elts (pm->policer_templates), + pool_elts (pm->policers)); + return 0; +} +/* *INDENT-OFF* */ +VLIB_CLI_COMMAND (show_policer_pools_command, static) = { + .path = "show policer pools", + .short_help = "show policer pools", + .function = show_policer_pools_command_fn, +}; +/* *INDENT-ON* */ + clib_error_t * policer_init (vlib_main_t * vm) { -- 2.16.6