diff --git a/common/utils/ocp_itti/intertask_interface.cpp b/common/utils/ocp_itti/intertask_interface.cpp
index 43001ec95b2f3a549365583fa2540c06649e55ce..4613cd5c1b8953a26827575b28e69a70220959e5 100644
--- a/common/utils/ocp_itti/intertask_interface.cpp
+++ b/common/utils/ocp_itti/intertask_interface.cpp
@@ -438,23 +438,24 @@ extern "C" {
   void itti_send_terminate_message(task_id_t task_id) {
   }
 
-  static volatile bool shutting_down;
+  pthread_mutex_t signal_mutex;
 
   static void catch_sigterm(int) {
     static const char msg[] = "\n** Caught SIGTERM, shutting down\n";
     __attribute__((unused))
     int unused = write(STDOUT_FILENO, msg, sizeof(msg) - 1);
-    shutting_down = true;
+    pthread_mutex_unlock(&signal_mutex);
   }
 
   void itti_wait_tasks_end(void) {
-    shutting_down = false;
+
+    pthread_mutex_init(&signal_mutex, NULL);
+    pthread_mutex_lock(&signal_mutex);
+
     signal(SIGTERM, catch_sigterm);
-    //signal(SIGINT, catch_sigterm);
-    while (! shutting_down)
-    {
-      sleep(24 * 3600);
-    }
+    signal(SIGINT, catch_sigterm);
+
+    pthread_mutex_lock(&signal_mutex);
   }
 
   void itti_update_lte_time(uint32_t frame, uint8_t slot) {}