summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Qiu <qdy220091330@gmail.com>2016-07-08 15:28:41 +0800
committerChris Luke <chris_luke@comcast.com>2016-07-29 13:01:38 +0000
commitc11ce3ee2552c363879082ed8cff048d87389eb9 (patch)
tree37cec54a4daabf65fd32e16514213c8db74792b3
parent2828efcfb96be56f0ef894e2df1e309670a2283a (diff)
plugins/vcgn-plugin: Fix vpp hang with pthread spinlock
Currently, pthread spinlock is initialized in macro ASSERT, thus the spinlock only will be initialized when CLIB_ASSERT_ENABLE is true. But CLIB_ASSERT_ENABLE depends on CLIB_DEBUG been set. Mostly, CLIB_DEBUG is zero, so spinlock will never been initialized, which will lead vpp hang when try to hold the lock. This patch fix this issue. Change-Id: If01982b5df849834ccbc705f8e9291f2b6c32d0a Signed-off-by: Michael Qiu <qiudayu@chinac.com>
-rw-r--r--plugins/vcgn-plugin/vcgn/cnat_db_v2.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/plugins/vcgn-plugin/vcgn/cnat_db_v2.c b/plugins/vcgn-plugin/vcgn/cnat_db_v2.c
index 2b43849d..46af9f31 100644
--- a/plugins/vcgn-plugin/vcgn/cnat_db_v2.c
+++ b/plugins/vcgn-plugin/vcgn/cnat_db_v2.c
@@ -3675,7 +3675,7 @@ VLIB_REGISTER_NODE (cnat_db_v2_node) = {
void cnat_db_v2_init (void)
{
- u32 i, n;
+ u32 i, n, lockinit;
cnat_timeout_db_entry_t * tdb __attribute__((unused));
cgse_nat_db_entry_t *comb_db __attribute__((unused));
@@ -3788,15 +3788,19 @@ void cnat_db_v2_init (void)
clib_mem_alloc_aligned (CLIB_CACHE_LINE_BYTES,
CLIB_CACHE_LINE_BYTES);
- ASSERT (pthread_spin_init(cnat_db_v2_main.main_db_lockp,
- PTHREAD_PROCESS_PRIVATE) == 0);
- ASSERT (pthread_spin_init(cnat_db_v2_main.user_db_lockp,
- PTHREAD_PROCESS_PRIVATE) == 0);
- ASSERT (pthread_spin_init(cnat_db_v2_main.session_db_lockp,
- PTHREAD_PROCESS_PRIVATE) == 0);
+ lockinit = pthread_spin_init(cnat_db_v2_main.main_db_lockp,
+ PTHREAD_PROCESS_PRIVATE);
+ ASSERT (lockinit == 0);
+
+ lockinit = pthread_spin_init(cnat_db_v2_main.user_db_lockp,
+ PTHREAD_PROCESS_PRIVATE);
+ ASSERT (lockinit == 0);
+
+ lockinit = pthread_spin_init(cnat_db_v2_main.session_db_lockp,
+ PTHREAD_PROCESS_PRIVATE);
+ ASSERT (lockinit == 0);
cnat_db_init_done = 1;
printf("CNAT DB init is successful\n");
return;
- //return 0;
}