From 8c5524e4558a80cf3794c10ae82a1f3eb20400b9 Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@openairinterface.org>
Date: Tue, 18 Jan 2022 11:53:57 +0100
Subject: [PATCH] Shutdown nr-softmodem cleanly

---
 common/utils/ocp_itti/intertask_interface.cpp |  1 +
 executables/nr-softmodem.c                    |  1 -
 openair1/PHY/INIT/nr_init_ru.c                | 12 +++++++-----
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/common/utils/ocp_itti/intertask_interface.cpp b/common/utils/ocp_itti/intertask_interface.cpp
index 44fae9f7888..111a423dcb5 100644
--- a/common/utils/ocp_itti/intertask_interface.cpp
+++ b/common/utils/ocp_itti/intertask_interface.cpp
@@ -450,6 +450,7 @@ extern "C" {
   void itti_wait_tasks_end(void) {
     shutting_down = false;
     signal(SIGTERM, catch_sigterm);
+    signal(SIGINT, catch_sigterm);
     while (! shutting_down)
     {
       sleep(24 * 3600);
diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index 2b8335167ac..9dbc94637ca 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -876,7 +876,6 @@ int main( int argc, char **argv ) {
     nr_phy_free_RU(RC.ru[inst]);
   }
 
-  free_lte_top();
   pthread_cond_destroy(&sync_cond);
   pthread_mutex_destroy(&sync_mutex);
   pthread_cond_destroy(&nfapi_sync_cond);
diff --git a/openair1/PHY/INIT/nr_init_ru.c b/openair1/PHY/INIT/nr_init_ru.c
index 4024ed16172..73666b48ac2 100644
--- a/openair1/PHY/INIT/nr_init_ru.c
+++ b/openair1/PHY/INIT/nr_init_ru.c
@@ -193,7 +193,7 @@ void nr_phy_free_RU(RU_t *ru)
     free_and_zero(ru->common.rxdata_7_5kHz);
 
     // free beamforming input buffers (TX)
-    for (i = 0; i < 15; i++) free_and_zero(ru->common.txdataF[i]);
+    for (i = 0; i < ru->nb_tx; i++) free_and_zero(ru->common.txdataF[i]);
     free_and_zero(ru->common.txdataF);
 
     // free IFFT input buffers (TX)
@@ -209,10 +209,12 @@ void nr_phy_free_RU(RU_t *ru)
 	free_and_zero(ru->prach_rxsigF[j][i]);
       }
     }
-    for (i = 0; i < ru->num_gNB; i++) {
-      for (p = 0; p < 15; p++) {
-	  for (j=0; j<ru->nb_tx; j++) free_and_zero(ru->beam_weights[i][p][j]);
-	  free_and_zero(ru->beam_weights[i][p]);
+    if (ru->do_precoding == 1) {
+      for (i = 0; i < ru->num_gNB; i++) {
+        for (p = 0; p < ru->nb_log_antennas; p++) {
+          for (j=0; j<ru->nb_tx; j++) free_and_zero(ru->beam_weights[i][p][j]);
+          free_and_zero(ru->beam_weights[i][p]);
+        }
       }
     }
   }
-- 
GitLab