From 9db78ab4d6c2291e5dc0830d74619d406d58d4df Mon Sep 17 00:00:00 2001
From: Bruno Mongazon-Cazavet <bruno.mongazon-cazavet@nokia-bell-labs.com>
Date: Thu, 23 Feb 2023 09:56:24 +0100
Subject: [PATCH] fix warnings introduced by changes in _Assert_Exit_ macro

---
 cmake_targets/build_oai               |  2 +-
 common/utils/assertions.h             | 27 ++++++++++++++-------------
 executables/main_ru.c                 |  2 +-
 executables/nr-cuup.c                 |  6 ++++++
 executables/nr-softmodem.c            |  2 +-
 executables/softmodem-common.c        |  2 +-
 openair2/COMMON/platform_types.h      |  2 +-
 radio/USRP/USERSPACE/LIB/usrp_lib.cpp |  2 +-
 radio/iqplayer/iqplayer_lib.c         |  2 +-
 9 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index f51f76aed63..974b583b393 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -595,7 +595,7 @@ function main() {
 
     echo_info "Compiling UE specific part"
 
-    if [ $UE_ip -eq 1 ]
+    if [ "$UE_ip" = 1 ]
     then
       echo_info "Building ue_ip module"
       compilations $BUILD_DIR ue_ip
diff --git a/common/utils/assertions.h b/common/utils/assertions.h
index bf777a29dea..a5b2149edee 100644
--- a/common/utils/assertions.h
+++ b/common/utils/assertions.h
@@ -30,19 +30,20 @@
 #include <platform_types.h>
 #include "backtrace.h"
 
-#define EXIT_NORMAL 0
-#define EXIT_ASSERT 1
-
-#define _Assert_Exit_                                                                                      \
-  if (getenv("gdbStacks")) {                                                                               \
-    char tmp[1000];                                                                                        \
-    sprintf(tmp, "gdb -ex='set confirm off' -ex 'thread apply all bt' -ex q -p %d < /dev/null", getpid()); \
-    __attribute__((unused)) int dummy = system(tmp);                                                       \
-  }                                                                                                        \
-  fprintf(stderr, "\nExiting execution\n");                                                                \
-  fflush(stdout);                                                                                          \
-  fflush(stderr);                                                                                          \
-  exit_function(__FILE__, __FUNCTION__, __LINE__, "_Assert_Exit_", EXIT_ASSERT);
+#define OAI_EXIT_NORMAL 0
+#define OAI_EXIT_ASSERT 1
+
+#define _Assert_Exit_							\
+  if (getenv("gdbStacks")) {						\
+    char tmp [1000];							\
+    sprintf(tmp,"gdb -ex='set confirm off' -ex 'thread apply all bt' -ex q -p %d < /dev/null", getpid());  \
+    __attribute__((unused)) int dummy=system(tmp);						\
+  }									\
+  fprintf(stderr, "\nExiting execution\n");				\
+  fflush(stdout);							\
+  fflush(stderr);							\
+  exit_function(__FILE__, __FUNCTION__, __LINE__, "_Assert_Exit_", OAI_EXIT_ASSERT); \
+  abort(); // to avoid gcc warnings - never executed unless app-specific exit_function() does not exit() nor abort()
 
 #define _Assert_(cOND, aCTION, fORMAT, aRGS...)             \
 do {                                                        \
diff --git a/executables/main_ru.c b/executables/main_ru.c
index 1178d040af8..4ee26783378 100644
--- a/executables/main_ru.c
+++ b/executables/main_ru.c
@@ -86,7 +86,7 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
 
 
 void nfapi_setmode(nfapi_mode_t nfapi_mode) { return; }
-void exit_function(const char *file, const char *function, const int line, const char *s) {
+void exit_function(const char *file, const char *function, const int line, const char *s, const int assert) {
 
   if (s != NULL) {
     printf("%s:%d %s() Exiting OAI softmodem: %s\n",file,line, function, s);
diff --git a/executables/nr-cuup.c b/executables/nr-cuup.c
index 5af46176e47..d35762c4f84 100644
--- a/executables/nr-cuup.c
+++ b/executables/nr-cuup.c
@@ -40,6 +40,12 @@ RRC_release_list_t rrc_release_info;
 
 void exit_function(const char *file, const char *function, const int line, const char *s, const int assert)
 {
+  if (assert) {
+    abort();
+  } else {
+    sleep(1); // allow other threads to exit first
+    exit(EXIT_SUCCESS);
+  }
 }
 
 nfapi_mode_t nfapi_mod = -1;
diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index 1c1813d3a10..f3d0b58df50 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -288,7 +288,7 @@ void exit_function(const char *file, const char *function, const int line, const
   if (assert) {
     abort();
   } else {
-    sleep(1); // allow lte-softmodem threads to exit first
+    sleep(1); // allow nr-softmodem threads to exit first
     exit(EXIT_SUCCESS);
   }
 }
diff --git a/executables/softmodem-common.c b/executables/softmodem-common.c
index fccc6d1118f..f0dc5488f9a 100644
--- a/executables/softmodem-common.c
+++ b/executables/softmodem-common.c
@@ -215,7 +215,7 @@ void signal_handler(int sig) {
       softmodem_printresources(sig,(telnet_printfunc_t)printf);
     if (sig != SOFTMODEM_RTSIGNAL) {
       printf("Linux signal %s...\n",strsignal(sig));
-      exit_function(__FILE__, __FUNCTION__, __LINE__, "softmodem starting exit procedure\n", EXIT_NORMAL);
+      exit_function(__FILE__, __FUNCTION__, __LINE__, "softmodem starting exit procedure\n", OAI_EXIT_NORMAL);
     }
   }
 }
diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h
index e8d7b4915f5..c6308a44654 100644
--- a/openair2/COMMON/platform_types.h
+++ b/openair2/COMMON/platform_types.h
@@ -281,7 +281,7 @@ typedef struct protocol_ctxt_s {
 
 #define CHECK_CTXT_ARGS(CTXT_Pp)
 
-#define exit_fun(msg) exit_function(__FILE__, __FUNCTION__, __LINE__, "exit_fun", EXIT_NORMAL)
+#define exit_fun(msg) exit_function(__FILE__, __FUNCTION__, __LINE__, "exit_fun", OAI_EXIT_NORMAL)
 #ifdef __cplusplus
 extern "C"
 {
diff --git a/radio/USRP/USERSPACE/LIB/usrp_lib.cpp b/radio/USRP/USERSPACE/LIB/usrp_lib.cpp
index c3cc7c2007f..61013ef569f 100644
--- a/radio/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/radio/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -789,7 +789,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
       recPlay->nbSamplesBlocks++;
       LOG_D(HW,"recorded %d samples, for TS %lu, shift in buffer %ld nbBytes %d nbSamplesBlocks %d\n", nsamps, hdr->ts, recPlay->currentPtr-(uint8_t *)recPlay->ms_sample, (int)hdr->nbBytes, (int)recPlay->nbSamplesBlocks);
     } else
-      exit_function(__FILE__, __FUNCTION__, __LINE__, "Recording reaches max iq limit\n", EXIT_NORMAL);
+      exit_function(__FILE__, __FUNCTION__, __LINE__, "Recording reaches max iq limit\n", OAI_EXIT_NORMAL);
   }
   read_count++;
   LOG_D(HW,"usrp_lib: returning %d samples at ts %lu read_count %d\n", samples_received, *ptimestamp, read_count); 
diff --git a/radio/iqplayer/iqplayer_lib.c b/radio/iqplayer/iqplayer_lib.c
index 165fd7ca8cf..7ac587bb958 100644
--- a/radio/iqplayer/iqplayer_lib.c
+++ b/radio/iqplayer/iqplayer_lib.c
@@ -268,7 +268,7 @@ static int trx_iqplayer_read(openair0_device *device, openair0_timestamp *ptimes
     if (s->wrap_count == device->openair0_cfg->recplay_conf->u_sf_loops) {
       LOG_W(HW, "iqplayer device terminating subframes replay  after %u iteration\n",
             device->openair0_cfg->recplay_conf->u_sf_loops);
-      exit_function(__FILE__, __FUNCTION__, __LINE__,"replay ended, triggering process termination\n", EXIT_NORMAL);
+      exit_function(__FILE__, __FUNCTION__, __LINE__,"replay ended, triggering process termination\n", OAI_EXIT_NORMAL);
     }
 
     if (s->wrap_count > 0) {
-- 
GitLab