aboutsummaryrefslogtreecommitdiffstats
path: root/src/vppinfra
diff options
context:
space:
mode:
authorAndrew Yourtchenko <ayourtch@gmail.com>2018-09-20 15:36:51 +0200
committerDave Barach <openvpp@barachs.net>2018-09-20 19:13:25 +0000
commitdf32bc4dee0cfe514a8fca5085ea555211521387 (patch)
treef0e4e6deb4e21ab26fa3e5fb1762210e715eb91b /src/vppinfra
parent4a6cb83d334e391f85332ea38a2e467ac7743e4b (diff)
bihash template: avoid memory leak upon rehash
Call the BV (value_free) when we have performed the rehash and thus no longer need the memory that old value for the bucket refers to. Change-Id: Ibb82174fc8002aeb3e1a6c8d1f90293d73bc45d8 Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Diffstat (limited to 'src/vppinfra')
-rw-r--r--src/vppinfra/bihash_template.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c
index 2571c47e64c..752597ebbd5 100644
--- a/src/vppinfra/bihash_template.c
+++ b/src/vppinfra/bihash_template.c
@@ -627,6 +627,9 @@ expand_ok:
tmp_b.lock = 0;
CLIB_MEMORY_BARRIER ();
b->as_u64 = tmp_b.as_u64;
+ /* free the old bucket */
+ v = BV (clib_bihash_get_value) (h, h->saved_bucket.offset);
+ BV (value_free) (h, v, h->saved_bucket.log2_pages);
BV (clib_bihash_alloc_unlock) (h);
return (0);
}