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>
void cnat_db_v2_init (void)
{
void cnat_db_v2_init (void)
{
cnat_timeout_db_entry_t * tdb __attribute__((unused));
cgse_nat_db_entry_t *comb_db __attribute__((unused));
cnat_timeout_db_entry_t * tdb __attribute__((unused));
cgse_nat_db_entry_t *comb_db __attribute__((unused));
clib_mem_alloc_aligned (CLIB_CACHE_LINE_BYTES,
CLIB_CACHE_LINE_BYTES);
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;
cnat_db_init_done = 1;
printf("CNAT DB init is successful\n");
return;