plugins/vcgn-plugin: Fix vpp hang with pthread spinlock 82/2082/2
authorMichael Qiu <qdy220091330@gmail.com>
Fri, 8 Jul 2016 07:28:41 +0000 (15:28 +0800)
committerChris Luke <chris_luke@comcast.com>
Fri, 29 Jul 2016 13:01:38 +0000 (13:01 +0000)
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>
plugins/vcgn-plugin/vcgn/cnat_db_v2.c

index 2b43849..46af9f3 100644 (file)
@@ -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;
 }