From 744fe928598383dedd9e4aa663f68a2ddc52e2bd Mon Sep 17 00:00:00 2001
From: laurent <laurent.thomas@open-cells.com>
Date: Tue, 28 Apr 2020 15:39:50 +0200
Subject: [PATCH] set back rrc as a separate thread, lead to create back race
 conditions

---
 common/utils/ocp_itti/intertask_interface.h |  2 +-
 openair2/RRC/LTE/rrc_eNB.c                  | 15 ++++++---------
 targets/COMMON/create_tasks.c               |  6 +++---
 targets/RT/USER/lte-softmodem.c             |  9 ++++++---
 targets/RT/USER/lte-uesoftmodem.c           |  6 ------
 5 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/common/utils/ocp_itti/intertask_interface.h b/common/utils/ocp_itti/intertask_interface.h
index 265a57ca637..ed4192eed67 100644
--- a/common/utils/ocp_itti/intertask_interface.h
+++ b/common/utils/ocp_itti/intertask_interface.h
@@ -288,7 +288,7 @@ void * rrc_enb_process_msg(void*);
   TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL)   \
   TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL)   \
   TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL)   \
-  TASK_DEF(TASK_RRC_ENB,  TASK_PRIORITY_MED,  200, rrc_enb_process_msg,NULL)\
+  TASK_DEF(TASK_RRC_ENB,  TASK_PRIORITY_MED,  200, NULL,NULL)\
   TASK_DEF(TASK_RRC_GNB,  TASK_PRIORITY_MED,  200, NULL,NULL)\
   TASK_DEF(TASK_RAL_ENB,  TASK_PRIORITY_MED,  200, NULL, NULL)  \
   TASK_DEF(TASK_S1AP,     TASK_PRIORITY_MED,  200, NULL, NULL)  \
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index 9cca00ca2ec..181346a0149 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -8884,29 +8884,26 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
   return NULL;
 }
 
-// as there are race conditions, no rrc thread
 //-----------------------------------------------------------------------------
 void *
-rrc_enb_process_msg(
+rrc_enb_task(
   void *args_p
 )
 //-----------------------------------------------------------------------------
 {
+  rrc_enb_init();
 
+  itti_mark_task_ready(TASK_RRC_ENB);
+  LOG_I(RRC,"Entering main loop of RRC message task\n");
 
-  //while (1) {
-    //(void) rrc_enb_process_itti_msg(NULL);
-  //}
-
-  //while (1) {
+  while (1) {
     (void) rrc_enb_process_itti_msg(NULL);
 {
   //extern volatile int go_nr;
   void rrc_go_nr(void);
   //if (go_nr) rrc_go_nr();
 }
-  //}
-return NULL;
+  }
   }
 
 /*------------------------------------------------------------------------------*/
diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c
index 10691d2db8c..4d57ab4e166 100644
--- a/targets/COMMON/create_tasks.c
+++ b/targets/COMMON/create_tasks.c
@@ -56,9 +56,9 @@ int create_tasks(uint32_t enb_nb) {
   rc = itti_create_task (TASK_ENB_APP, eNB_app_task, NULL);
   AssertFatal(rc >= 0, "Create task for eNB APP failed\n");
 
-  // No more rrc thread, as many race conditions are hidden behind
-  rrc_enb_init();
-  itti_mark_task_ready(TASK_RRC_ENB);
+  LOG_I(RRC,"Creating RRC eNB Task\n");
+  rc = itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL);
+  AssertFatal(rc >= 0, "Create task for RRC eNB failed\n");
 
   if (EPC_MODE_ENABLED && ! ( split73==SPLIT73_DU ) ) {
     rc = itti_create_task(TASK_SCTP, sctp_eNB_task, NULL);
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index f5db3d3c5a1..d8c5e255939 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -446,9 +446,12 @@ int restart_L1L2(module_id_t enb_id) {
   init_UE_info(&RC.mac[enb_id]->UE_info);
   LOG_I(ENB_APP, "attempting to create ITTI tasks\n");
 
-  // No more rrc thread, as many race conditions are hidden behind
-  rrc_enb_init();
-  itti_mark_task_ready(TASK_RRC_ENB);
+  if (itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL) < 0) {
+    LOG_E(RRC, "Create task for RRC eNB failed\n");
+    return -1;
+  } else {
+    LOG_I(RRC, "Re-created task for RRC eNB successfully\n");
+  }
 
   /* pass a reconfiguration request which will configure everything down to
    * RC.eNB[i][j]->frame_parms, too */
diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c
index 395e73bb662..2c9271888bd 100644
--- a/targets/RT/USER/lte-uesoftmodem.c
+++ b/targets/RT/USER/lte-uesoftmodem.c
@@ -541,12 +541,6 @@ void init_pdcp(void) {
   pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
 }
 
-// Stupid function addition because UE itti messages queues definition is common with eNB
-void *rrc_enb_process_msg(void *notUsed) {
-AssertFatal(false,"");
-	return NULL;
-}
-
 int main( int argc, char **argv ) {
   int CC_id;
   uint8_t  abstraction_flag=0;
-- 
GitLab