From f35d9f20446d0d959947914c3e34989d946508d6 Mon Sep 17 00:00:00 2001
From: Wang Tsu-Han <wangts@eurecom.fr>
Date: Thu, 23 May 2019 17:53:29 +0200
Subject: [PATCH] adding assertion for lte-ru

---
 targets/RT/USER/lte-ru.c | 196 +++++++++++++++++++--------------------
 1 file changed, 94 insertions(+), 102 deletions(-)

diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index 601db213b3..e685811db7 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -409,6 +409,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
   uint16_t packet_type;
   uint32_t symbol_number,symbol_mask,symbol_mask_full;
   int subframe_tx,frame_tx;
+  int ret;
 
   symbol_number = 0;
   symbol_mask = 0;
@@ -419,9 +420,9 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
     LOG_D(PHY,"income frame.subframe %d.%d, our frame.subframe.symbol_number %d.%d.%d (symbol mask %x)\n",frame_tx,subframe_tx,*frame,*subframe,symbol_number,symbol_mask);
     if (ru->cmd == STOP_RU){
       LOG_E(PHY,"Got STOP_RU\n");
-      pthread_mutex_lock(&proc->mutex_ru);
+      AssertFatal((ret=pthread_mutex_lock(&proc->mutex_ru))==0,"mutex_lock returns %d\n",ret);
       proc->instance_cnt_ru = -1;
-      pthread_mutex_unlock(&proc->mutex_ru);
+      AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_ru))==0,"mutex_unlock returns %d\n",ret);
       ru->cmd=STOP_RU;
       return;
     } 
@@ -530,6 +531,8 @@ static void *emulatedRF_thread(void *param) {
   CPU_SET(1,&cpuset);
   pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
   int policy;
+  int ret;
+
   struct sched_param sparam;
   memset(&sparam, 0, sizeof(sparam));
   sparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
@@ -545,10 +548,10 @@ static void *emulatedRF_thread(void *param) {
     }
 
     proc->emulate_rf_busy = 1;
-    pthread_mutex_lock(&proc->mutex_emulateRF);
+    AssertFatal((ret=pthread_mutex_lock(&proc->mutex_emulateRF))==0,"mutex_lock returns %d\n",ret);
     ++proc->instance_cnt_emulateRF;
-    pthread_mutex_unlock(&proc->mutex_emulateRF);
     pthread_cond_signal(&proc->cond_emulateRF);
+    AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_emulateRF))==0,"mutex_unlock returns %d\n",ret);
   }
 
   return 0;
@@ -848,28 +851,25 @@ void *ru_thread_asynch_rxtx( void *param ) {
 
 
 void wakeup_slaves(RU_proc_t *proc) {
-  int i;
+  int i,ret;
   struct timespec wait;
-  wait.tv_sec=0;
-  wait.tv_nsec=5000000L;
+  int time_ns = 5000000L;
 
   for (i=0; i<proc->num_slaves; i++) {
     RU_proc_t *slave_proc = proc->slave_proc[i];
 
     // wake up slave FH thread
     // lock the FH mutex and make sure the thread is ready
-    if (pthread_mutex_timedlock(&slave_proc->mutex_FH,&wait) != 0) {
-      LOG_E( PHY, "ERROR pthread_mutex_lock for RU %d slave %d (IC %d)\n",proc->ru->idx,slave_proc->ru->idx,slave_proc->instance_cnt_FH);
-      exit_fun( "error locking mutex_rxtx" );
-      break;
-    }
+    clock_gettime(CLOCK_REALTIME,&wait);
+    wait.tv_nsec += time_ns;
+    AssertFatal((ret=pthread_mutex_timedlock(&slave_proc->mutex_FH,&wait))==ETIMEDOUT,"ERROR pthread_mutex_lock for RU %d slave %d (IC %d)\n",proc->ru->idx,slave_proc->ru->idx,slave_proc->instance_cnt_FH);
 
     int cnt_slave            = ++slave_proc->instance_cnt_FH;
     slave_proc->frame_rx     = proc->frame_rx;
     slave_proc->subframe_rx  = proc->subframe_rx;
     slave_proc->timestamp_rx = proc->timestamp_rx;
     slave_proc->timestamp_tx = proc->timestamp_tx;
-    pthread_mutex_unlock( &slave_proc->mutex_FH );
+    AssertFatal((ret=pthread_mutex_unlock( &slave_proc->mutex_FH ))==0,"mutex_unlock returns %d\n",ret);
 
     if (cnt_slave == 0) {
       // the thread was presumably waiting where it should and can now be woken up
@@ -981,17 +981,15 @@ void *ru_thread_prach_br( void *param ) {
 #endif
 
 int wakeup_synch(RU_t *ru) {
+  int ret;
   struct timespec wait;
-  wait.tv_sec=0;
-  wait.tv_nsec=5000000L;
+  int time_ns = 5000000L;
 
   // wake up synch thread
   // lock the synch mutex and make sure the thread is readif (pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait) != 0) {
-  if (pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait) != 0) {
-    LOG_E( PHY, "[RU] ERROR pthread_mutex_lock for RU synch thread (IC %d)\n", ru->proc.instance_cnt_synch );
-    exit_fun( "error locking mutex_synch" );
-    return(-1);
-  }
+  clock_gettime(CLOCK_REALTIME,&wait);
+  wait.tv_nsec += time_ns;
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait))==ETIMEDOUT,"[RU] ERROR pthread_mutex_lock for RU synch thread (IC %d)\n", ru->proc.instance_cnt_synch );
 
   ++ru->proc.instance_cnt_synch;
 
@@ -1002,7 +1000,7 @@ int wakeup_synch(RU_t *ru) {
     return(-1);
   }
 
-  pthread_mutex_unlock( &ru->proc.mutex_synch );
+  AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_synch ))==0,"mutex_unlock returns %d\n",ret);
   return(0);
 }
 
@@ -1014,6 +1012,7 @@ void do_ru_synch(RU_t *ru) {
   int32_t dummy_rx[ru->nb_rx][fp->samples_per_tti] __attribute__((aligned(32)));
   int rxs;
   int ic;
+  int ret;
 
   // initialize the synchronization buffer to the common_vars.rxdata
   for (int i=0; i<ru->nb_rx; i++)
@@ -1054,9 +1053,9 @@ void do_ru_synch(RU_t *ru) {
                                          fp->samples_per_tti,
                                          ru->nb_rx);
 
-      pthread_mutex_lock(&ru->proc.mutex_synch);
+      AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_synch))==0,"mutex_lock returns %d\n",ret);
       ic = ru->proc.instance_cnt_synch;
-      pthread_mutex_unlock(&ru->proc.mutex_synch);
+      AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_synch))==0,"mutex_unlock returns %d\n",ret);
     } // ic>=0
   } // in_synch==0
 
@@ -1189,15 +1188,13 @@ void wakeup_L1s(RU_t *ru) {
   
 }
 inline int wakeup_prach_ru(RU_t *ru) {
+  int ret;
   struct timespec wait;
-  wait.tv_sec=0;
-  wait.tv_nsec=5000000L;
+  int time_ns = 5000000L;
 
-  if (pthread_mutex_timedlock(&ru->proc.mutex_prach,&wait) !=0) {
-    LOG_E( PHY, "[RU] ERROR pthread_mutex_lock for RU prach thread (IC %d)\n", ru->proc.instance_cnt_prach);
-    exit_fun( "error locking mutex_rxtx" );
-    return(-1);
-  }
+  clock_gettime(CLOCK_REALTIME,&wait);
+  wait.tv_nsec += time_ns;
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach,&wait))==ETIMEDOUT,"[RU] ERROR pthread_mutex_lock for RU prach thread (IC %d)\n", ru->proc.instance_cnt_prach);
 
   if (ru->proc.instance_cnt_prach==-1) {
     ++ru->proc.instance_cnt_prach;
@@ -1215,21 +1212,21 @@ inline int wakeup_prach_ru(RU_t *ru) {
     AssertFatal(pthread_cond_signal(&ru->proc.cond_prach) == 0, "ERROR pthread_cond_signal for RU prach thread\n");
   } else LOG_W(PHY,"RU prach thread busy, skipping\n");
 
-  pthread_mutex_unlock( &ru->proc.mutex_prach );
+  AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_prach ))==0,"mutex_unlock returns %d\n",ret);
   return(0);
 }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
 inline int wakeup_prach_ru_br(RU_t *ru) {
+  int ret;
   struct timespec wait;
-  wait.tv_sec=0;
-  wait.tv_nsec=5000000L;
+  int time_ns = 5000000L;
+
+
+  clock_gettime(CLOCK_REALTIME,&wait);
+  wait.tv_nsec += time_ns;
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach_br,&wait))==ETIMEDOUT,"[RU] ERROR pthread_mutex_lock for RU prach thread BR (IC %d)\n", ru->proc.instance_cnt_prach_br);
 
-  if (pthread_mutex_timedlock(&ru->proc.mutex_prach_br,&wait) !=0) {
-    LOG_E( PHY, "[RU] ERROR pthread_mutex_lock for RU prach thread BR (IC %d)\n", ru->proc.instance_cnt_prach_br);
-    exit_fun( "error locking mutex_rxtx" );
-    return(-1);
-  }
 
   if (ru->proc.instance_cnt_prach_br==-1) {
     ++ru->proc.instance_cnt_prach_br;
@@ -1240,7 +1237,7 @@ inline int wakeup_prach_ru_br(RU_t *ru) {
     AssertFatal(pthread_cond_signal(&ru->proc.cond_prach_br) == 0, "ERROR pthread_cond_signal for RU prach thread BR\n");
   } else LOG_W(PHY,"RU prach thread busy, skipping\n");
 
-  pthread_mutex_unlock( &ru->proc.mutex_prach_br );
+  AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_prach_br ))==0,"mutex_unlock returns %d\n",ret);
   return(0);
 }
 #endif
@@ -1454,6 +1451,7 @@ void *ru_thread_tx( void *param ) {
   //pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
   //wait_sync("ru_thread_tx");
   wait_on_condition(&proc->mutex_FH1,&proc->cond_FH1,&proc->instance_cnt_FH1,"ru_thread_tx");
+  int ret;
 
   while (!oai_exit) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_CPUID_RU_THREAD_TX,sched_getcpu());
@@ -1486,7 +1484,7 @@ void *ru_thread_tx( void *param ) {
       eNB_proc  = &eNB->proc;
       L1_proc   = (get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT)? &eNB_proc->L1_proc_tx : &eNB_proc->L1_proc;
 
-      pthread_mutex_lock(&eNB_proc->mutex_RU_tx);
+      AssertFatal((ret=pthread_mutex_lock(&eNB_proc->mutex_RU_tx))==0,"mutex_lock returns %d\n",ret);
       for (int j=0; j<eNB->num_RU; j++) {
         if (ru == eNB->RU_list[j]) {
           if ((eNB_proc->RU_mask_tx&(1<<j)) > 0)
@@ -1502,12 +1500,12 @@ void *ru_thread_tx( void *param ) {
       }
       if (eNB_proc->RU_mask_tx != (1<<eNB->num_RU)-1) {  // not all RUs have provided their information so return
       	//printf("Not all RUs have provided their info (mask = %d), RU %d, num_RUs %d\n", eNB_proc->RU_mask_tx,ru->idx,eNB->num_RU);
-        pthread_mutex_unlock(&eNB_proc->mutex_RU_tx);
+        AssertFatal((ret=pthread_mutex_unlock(&eNB_proc->mutex_RU_tx))==0,"mutex_unlock returns %d\n",ret);
       } else { // all RUs TX are finished so send the ready signal to eNB processing
         eNB_proc->RU_mask_tx = 0;
 	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
-        pthread_mutex_unlock(&eNB_proc->mutex_RU_tx);
-        pthread_mutex_lock( &L1_proc->mutex_RUs);
+        AssertFatal((ret=pthread_mutex_unlock(&eNB_proc->mutex_RU_tx))==0,"mutex_unlock returns %d\n",ret);
+        AssertFatal((ret=pthread_mutex_lock( &L1_proc->mutex_RUs))==0,"mutex_lock returns %d\n",ret);
         L1_proc->instance_cnt_RUs = 0;
 
         LOG_D(PHY,"ru_thread_tx: Signaling RU TX done in %d.%d\n",proc->frame_tx,proc->subframe_tx);
@@ -1518,7 +1516,7 @@ void *ru_thread_tx( void *param ) {
           exit_fun( "ERROR pthread_cond_signal" );
         }
 
-        pthread_mutex_unlock( &L1_proc->mutex_RUs );
+        AssertFatal((ret=pthread_mutex_unlock( &L1_proc->mutex_RUs))==0,"mutex_unlock returns %d\n",ret);
       }
     }
     //printf("ru_thread_tx: Frame %d, Subframe %d: RU %d done (wait_cnt %d),RU_mask_tx %d\n",
@@ -1536,6 +1534,7 @@ void *ru_thread( void *param ) {
   int                subframe =9;
   int                frame    =1023;
   int                   resynch_done = 0;
+  int                ret;
   cpu_set_t cpuset;
   CPU_ZERO(&cpuset);
   // set default return value
@@ -1562,10 +1561,10 @@ void *ru_thread( void *param ) {
     }
     
     LOG_I(PHY, "Signaling main thread that RU %d is ready\n",ru->idx);
-    pthread_mutex_lock(&RC.ru_mutex);
+    AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
     RC.ru_mask &= ~(1<<ru->idx);
     pthread_cond_signal(&RC.ru_cond);
-    pthread_mutex_unlock(&RC.ru_mutex);
+    AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     ru->state = RU_RUN;
   }
   else if (ru->has_ctrl_prt == 0){
@@ -1584,25 +1583,25 @@ void *ru_thread( void *param ) {
 	printf("Exiting, cannot initialize RU Buffers\n");
 	exit(-1);
       }
-      pthread_mutex_lock(&RC.ru_mutex);
+      AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
       RC.ru_mask &= ~(1<<ru->idx);
       pthread_cond_signal(&RC.ru_cond);
-      pthread_mutex_unlock(&RC.ru_mutex);
+      AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     }
-    pthread_mutex_lock(&RC.ru_mutex);
+    AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
     RC.ru_mask &= ~(1<<ru->idx);
     pthread_cond_signal(&RC.ru_cond);
-    pthread_mutex_unlock(&RC.ru_mutex);
+    AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     
     ru->state = RU_RUN;
     
     
   }
   
-  pthread_mutex_lock(&proc->mutex_FH1);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_FH1))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_FH1 = 0;
-  pthread_mutex_unlock(&proc->mutex_FH1);
   pthread_cond_signal(&proc->cond_FH1);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_FH1))==0,"mutex_unlock returns %d\n",ret);
 
   while (!oai_exit) {
     
@@ -1636,10 +1635,10 @@ void *ru_thread( void *param ) {
     // wakeup the thread because the devices are ready at this point
     
     if ((ru->fh_south_asynch_in)||(ru->fh_north_asynch_in)) {
-      pthread_mutex_lock(&proc->mutex_asynch_rxtx);
+      AssertFatal((ret=pthread_mutex_lock(&proc->mutex_asynch_rxtx))==0,"mutex_lock returns %d\n",ret);
       proc->instance_cnt_asynch_rxtx=0;
-      pthread_mutex_unlock(&proc->mutex_asynch_rxtx);
       pthread_cond_signal(&proc->cond_asynch_rxtx);
+      AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_asynch_rxtx))==0,"mutex_unlock returns %d\n",ret);
     } else LOG_I(PHY,"RU %d no asynch_south interface\n",ru->idx);
     
     // if this is a slave RRU, try to synchronize on the DL frequency
@@ -1668,10 +1667,8 @@ void *ru_thread( void *param ) {
 	{ 
 	  phy_tx_end = 0;
 	  phy_tx_txdataF_end = 0;
-	  if(pthread_mutex_lock(&ru->proc.mutex_phy_tx) != 0){
-	    LOG_E( PHY, "[RU] ERROR pthread_mutex_lock for phy tx thread (IC %d)\n", ru->proc.instance_cnt_phy_tx);
-	    exit_fun( "error locking mutex_rxtx" );
-	  }
+          AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_phy_tx))==0,"[RU] ERROR pthread_mutex_lock for phy tx thread (IC %d)\n", ru->proc.instance_cnt_phy_tx);
+
 	  if (ru->proc.instance_cnt_phy_tx==-1) {
 	    ++ru->proc.instance_cnt_phy_tx;
 	    
@@ -1681,7 +1678,7 @@ void *ru_thread( void *param ) {
 	    LOG_E(PHY,"phy tx thread busy, skipping\n");
 	    ++ru->proc.instance_cnt_phy_tx;
 	  }
-	  pthread_mutex_unlock( &ru->proc.mutex_phy_tx );
+          AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_phy_tx ))==0,"mutex_unlock returns %d\n",ret);
 	} else { 
         phy_tx_end = 1;
         phy_tx_txdataF_end = 1;
@@ -1749,19 +1746,16 @@ void *ru_thread( void *param ) {
 	if (ru->feprx) ru->feprx(ru);
 	
         // wakeup all eNB processes waiting for this RU
-	pthread_mutex_lock(&proc->mutex_eNBs);
+        AssertFatal((ret=pthread_mutex_lock(&proc->mutex_eNBs))==0,"mutex_lock returns %d\n",ret);
 	if (proc->instance_cnt_eNBs==0) proc->instance_cnt_eNBs--;
-	pthread_mutex_unlock(&proc->mutex_eNBs);
+        AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_eNBs))==0,"mutex_unlock returns %d\n",ret);
 	
 #if defined(PRE_SCD_THREAD)
 	new_dlsch_ue_select_tbl_in_use = dlsch_ue_select_tbl_in_use;
 	dlsch_ue_select_tbl_in_use = !dlsch_ue_select_tbl_in_use;
 	memcpy(&pre_scd_eNB_UE_stats,&RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX);
 	memcpy(&pre_scd_activeUE, &RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.active, sizeof(boolean_t)*NUMBER_OF_UE_MAX);
-	if (pthread_mutex_lock(&ru->proc.mutex_pre_scd)!= 0) {
-	  LOG_E( PHY, "[eNB] error locking proc mutex for eNB pre scd\n");
-	  exit_fun("error locking mutex_time");
-	}
+        AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_pre_scd))==0,"[eNB] error locking proc mutex for eNB pre scd\n");
 	
 	ru->proc.instance_pre_scd++;
 	
@@ -1774,11 +1768,9 @@ void *ru_thread( void *param ) {
 	  LOG_E( PHY, "[eNB] frame %d subframe %d rxtx busy instance_pre_scd %d\n",
 		 frame,subframe,ru->proc.instance_pre_scd );
 	}
-	
-	if (pthread_mutex_unlock(&ru->proc.mutex_pre_scd)!= 0) {
-	  LOG_E( PHY, "[eNB] error unlocking mutex_pre_scd mutex for eNB pre scd\n");
-	  exit_fun("error unlocking mutex_pre_scd");
-	}
+
+	AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"[eNB] error unlocking mutex_pre_scd mutex for eNB pre scd\n");
+
 #endif
 	// wakeup all eNB processes waiting for this RU
 	if (ru->num_eNB>0) wakeup_L1s(ru);
@@ -1898,6 +1890,7 @@ void *pre_scd_thread( void *param ) {
   int                     CC_id;
   int                     Mod_id;
   RU_t               *ru      = (RU_t *)param;
+  int                     ret;
 
   // L2-emulator can work only one eNB
   if( NFAPI_MODE==NFAPI_MODE_VNF)
@@ -1914,13 +1907,13 @@ void *pre_scd_thread( void *param ) {
       break;
     }
 
-    pthread_mutex_lock(&ru->proc.mutex_pre_scd );
+    AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_pre_scd ))==0,"mutex_lock returns %d\n",ret);
 
     if (ru->proc.instance_pre_scd < 0) {
       pthread_cond_wait(&ru->proc.cond_pre_scd, &ru->proc.mutex_pre_scd);
     }
 
-    pthread_mutex_unlock(&ru->proc.mutex_pre_scd);
+    AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"mutex_unlock returns %d\n",ret);
     PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, Mod_id, ENB_FLAG_YES,
                                    NOT_A_RNTI, frame, subframe,Mod_id);
     pdcp_run(&ctxt);
@@ -1940,9 +1933,9 @@ void *pre_scd_thread( void *param ) {
       subframe++;
     }
 
-    pthread_mutex_lock(&ru->proc.mutex_pre_scd );
+    AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_pre_scd ))==0,"mutex_lock returns %d\n",ret);
     ru->proc.instance_pre_scd--;
-    pthread_mutex_unlock(&ru->proc.mutex_pre_scd);
+    AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"mutex_unlock returns %d\n",ret);
   }
 
   eNB_pre_scd_status = 0;
@@ -1964,6 +1957,7 @@ static void *eNB_thread_phy_tx( void *param ) {
   L1_rxtx_proc_t L1_proc;
   // set default return value
   eNB_thread_phy_tx_status = 0;
+  int ret;
   thread_top_init("eNB_thread_phy_tx",1,500000L,1000000L,20000000L);
 
   while (!oai_exit) {
@@ -1979,10 +1973,7 @@ static void *eNB_thread_phy_tx( void *param ) {
     phy_procedures_eNB_TX(eNB_list[0], &L1_proc, 1);
     phy_tx_txdataF_end = 1;
 
-    if(pthread_mutex_lock(&ru->proc.mutex_rf_tx) != 0) {
-      LOG_E( PHY, "[RU] ERROR pthread_mutex_lock for rf tx thread (IC %d)\n", ru->proc.instance_cnt_rf_tx);
-      exit_fun( "error locking mutex_rf_tx" );
-    }
+    AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_rf_tx))==0,"[RU] ERROR pthread_mutex_lock for rf tx thread (IC %d)\n", ru->proc.instance_cnt_rf_tx);
 
     if (ru->proc.instance_cnt_rf_tx==-1) {
       ++ru->proc.instance_cnt_rf_tx;
@@ -1996,7 +1987,7 @@ static void *eNB_thread_phy_tx( void *param ) {
       late_control=STATE_BURST_TERMINATE;
     }
 
-    pthread_mutex_unlock( &ru->proc.mutex_rf_tx );
+    AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_rf_tx ))==0,"mutex_unlock returns %d\n",ret);
 
     if (release_thread(&proc->mutex_phy_tx,&proc->instance_cnt_phy_tx,"eNB_thread_phy_tx") < 0) break;
 
@@ -2101,7 +2092,7 @@ void reset_proc(RU_t *ru) {
 extern void* ru_thread_control( void* param );
 
 void init_RU_proc(RU_t *ru) {
-  int i=0;
+  int i=0,ret;
   RU_proc_t *proc;
   pthread_attr_t *attr_FH=NULL,*attr_FH1=NULL,*attr_prach=NULL,*attr_asynch=NULL,*attr_synch=NULL,*attr_emulateRF=NULL, *attr_ctrl=NULL;
   //pthread_attr_t *attr_fep=NULL;
@@ -2257,36 +2248,37 @@ void init_RU_proc(RU_t *ru) {
   if (ru->function == eNodeB_3GPP) {
     usleep(10000);
     LOG_I(PHY, "Signaling main thread that RU %d (is_slave %d,send_dmrs %d) is ready in state %s\n",ru->idx,ru->is_slave,ru->generate_dmrs_sync,ru_states[ru->state]);
-    pthread_mutex_lock(&RC.ru_mutex);
+    AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
     RC.ru_mask &= ~(1<<ru->idx);
     pthread_cond_signal(&RC.ru_cond);
-    pthread_mutex_unlock(&RC.ru_mutex);
+    AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
   }
 }
 
 void kill_RU_proc(RU_t *ru) {
+  int ret;
   RU_proc_t *proc = &ru->proc;
 #if defined(PRE_SCD_THREAD)
-  pthread_mutex_lock(&proc->mutex_pre_scd);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_pre_scd))==0,"mutex_lock returns %d\n",ret);
   ru->proc.instance_pre_scd = 0;
   pthread_cond_signal(&proc->cond_pre_scd);
-  pthread_mutex_unlock(&proc->mutex_pre_scd);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_pre_scd))==0,"mutex_unlock returns %d\n",ret);
   pthread_join(proc->pthread_pre_scd, NULL);
   pthread_mutex_destroy(&proc->mutex_pre_scd);
   pthread_cond_destroy(&proc->cond_pre_scd);
 #endif
 #ifdef PHY_TX_THREAD
-  pthread_mutex_lock(&proc->mutex_phy_tx);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_phy_tx))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_phy_tx = 0;
   pthread_cond_signal(&proc->cond_phy_tx);
-  pthread_mutex_unlock(&proc->mutex_phy_tx);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_phy_tx))==0,"mutex_unlock returns %d\n",ret);
   pthread_join(ru->proc.pthread_phy_tx, NULL);
   pthread_mutex_destroy( &proc->mutex_phy_tx);
   pthread_cond_destroy( &proc->cond_phy_tx);
-  pthread_mutex_lock(&proc->mutex_rf_tx);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_rf_tx))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_rf_tx = 0;
   pthread_cond_signal(&proc->cond_rf_tx);
-  pthread_mutex_unlock(&proc->mutex_rf_tx);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_rf_tx))==0,"mutex_unlock returns %d\n",ret);
   pthread_join(proc->pthread_rf_tx, NULL);
   pthread_mutex_destroy( &proc->mutex_rf_tx);
   pthread_cond_destroy( &proc->cond_rf_tx);
@@ -2299,38 +2291,38 @@ void kill_RU_proc(RU_t *ru) {
     kill_feptx_thread(ru);
   }
 
-  pthread_mutex_lock(&proc->mutex_FH);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_FH))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_FH = 0;
   pthread_cond_signal(&proc->cond_FH);
-  pthread_mutex_unlock(&proc->mutex_FH);
-  pthread_mutex_lock(&proc->mutex_FH1);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_FH))==0,"mutex_unlock returns %d\n",ret);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_FH1))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_FH1 = 0;
   pthread_cond_signal(&proc->cond_FH1);
-  pthread_mutex_unlock(&proc->mutex_FH1);
-  pthread_mutex_lock(&proc->mutex_prach);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_FH1))==0,"mutex_unlock returns %d\n",ret);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_prach))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_prach = 0;
   pthread_cond_signal(&proc->cond_prach);
-  pthread_mutex_unlock(&proc->mutex_prach);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_prach))==0,"mutex_unlock returns %d\n",ret);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  pthread_mutex_lock(&proc->mutex_prach_br);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_prach_br))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_prach_br = 0;
   pthread_cond_signal(&proc->cond_prach_br);
-  pthread_mutex_unlock(&proc->mutex_prach_br);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_prach_br))==0,"mutex_unlock returns %d\n",ret);
 #endif
-  pthread_mutex_lock(&proc->mutex_synch);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_synch))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_synch = 0;
   pthread_cond_signal(&proc->cond_synch);
-  pthread_mutex_unlock(&proc->mutex_synch);
-  pthread_mutex_lock(&proc->mutex_eNBs);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_synch))==0,"mutex_unlock returns %d\n",ret);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_eNBs))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_eNBs = 1;
   // cond_eNBs is used by both ru_thread and ru_thread_tx, so we need to send
   // a broadcast to wake up both threads
   pthread_cond_broadcast(&proc->cond_eNBs);
-  pthread_mutex_unlock(&proc->mutex_eNBs);
-  pthread_mutex_lock(&proc->mutex_asynch_rxtx);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_eNBs))==0,"mutex_unlock returns %d\n",ret);
+  AssertFatal((ret=pthread_mutex_lock(&proc->mutex_asynch_rxtx))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_asynch_rxtx = 0;
   pthread_cond_signal(&proc->cond_asynch_rxtx);
-  pthread_mutex_unlock(&proc->mutex_asynch_rxtx);
+  AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_asynch_rxtx))==0,"mutex_unlock returns %d\n",ret);
   LOG_D(PHY, "Joining pthread_FH\n");
   pthread_join(proc->pthread_FH, NULL);
 
-- 
GitLab