From 42b29ba3d4a30e4bf660f3a0a6a4af40d62861fe Mon Sep 17 00:00:00 2001 From: Nathan Skrzypczak Date: Mon, 17 Aug 2020 14:14:56 +0200 Subject: [PATCH] vppinfra: fix RC in bihash instantiation There can be a race condition in the case a thread tries to do a bihash_search while another instantiates the bihash. Type: fix Change-Id: Ic61b590763beb409e112957c43a5a66cd10afb28 Signed-off-by: Nathan Skrzypczak --- src/vppinfra/bihash_template.c | 4 ++-- src/vppinfra/bihash_template.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c index 02d84abd9eb..aac66cbf53b 100644 --- a/src/vppinfra/bihash_template.c +++ b/src/vppinfra/bihash_template.c @@ -893,7 +893,7 @@ u8 *BV (format_bihash) (u8 * s, va_list * args) s = format (s, "Hash table %s\n", h->name ? h->name : (u8 *) "(unnamed)"); #if BIHASH_LAZY_INSTANTIATE - if (PREDICT_FALSE (alloc_arena (h) == 0)) + if (PREDICT_FALSE (h->instantiated == 0)) return format (s, "[empty, uninitialized]"); #endif @@ -994,7 +994,7 @@ void BV (clib_bihash_foreach_key_value_pair) #if BIHASH_LAZY_INSTANTIATE - if (PREDICT_FALSE (alloc_arena (h) == 0)) + if (PREDICT_FALSE (h->instantiated == 0)) return; #endif diff --git a/src/vppinfra/bihash_template.h b/src/vppinfra/bihash_template.h index 07adeb853ec..85c5d6505c0 100644 --- a/src/vppinfra/bihash_template.h +++ b/src/vppinfra/bihash_template.h @@ -388,7 +388,7 @@ static inline int BV (clib_bihash_search_inline_with_hash) /* *INDENT-ON* */ #if BIHASH_LAZY_INSTANTIATE - if (PREDICT_FALSE (alloc_arena (h) == 0)) + if (PREDICT_FALSE (h->instantiated == 0)) return -1; #endif @@ -453,7 +453,7 @@ static inline void BV (clib_bihash_prefetch_data) BVT (clib_bihash_bucket) * b; #if BIHASH_LAZY_INSTANTIATE - if (PREDICT_FALSE (alloc_arena (h) == 0)) + if (PREDICT_FALSE (h->instantiated == 0)) return; #endif @@ -489,7 +489,7 @@ static inline int BV (clib_bihash_search_inline_2_with_hash) ASSERT (valuep); #if BIHASH_LAZY_INSTANTIATE - if (PREDICT_FALSE (alloc_arena (h) == 0)) + if (PREDICT_FALSE (h->instantiated == 0)) return -1; #endif -- 2.16.6