diff options
Diffstat (limited to 'src/vnet/dpo')
-rw-r--r-- | src/vnet/dpo/load_balance_map.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/vnet/dpo/load_balance_map.c b/src/vnet/dpo/load_balance_map.c index 70ce1bf7c39..4e27e5db3d8 100644 --- a/src/vnet/dpo/load_balance_map.c +++ b/src/vnet/dpo/load_balance_map.c @@ -415,6 +415,14 @@ load_balance_map_init (load_balance_map_t *lbm, return (lbm); } +static void +load_balance_map_destroy (load_balance_map_t *lbm) +{ + vec_free(lbm->lbm_paths); + vec_free(lbm->lbm_buckets); + pool_put(load_balance_map_pool, lbm); +} + index_t load_balance_map_add_or_lock (u32 n_buckets, u32 sum_of_weights, @@ -434,6 +442,7 @@ load_balance_map_add_or_lock (u32 n_buckets, else { lbm = load_balance_map_get(lbmi); + load_balance_map_destroy(tmp); } lbm->lbm_locks++; @@ -468,9 +477,7 @@ load_balance_map_unlock (index_t lbmi) if (0 == lbm->lbm_locks) { load_balance_map_db_remove(lbm); - vec_free(lbm->lbm_paths); - vec_free(lbm->lbm_buckets); - pool_put(load_balance_map_pool, lbm); + load_balance_map_destroy(lbm); } } |