From e8230f2726b2efc5eb416d017c4e124e2e45e60d Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Wed, 6 Nov 2013 16:10:19 +0000
Subject: [PATCH] - Bugfix for epoll_wait and interrupted system call when
 using gdb - Fix memory leaks for itti_analyzer

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4333 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 common/utils/itti/intertask_interface.c            | 12 +++++++-----
 common/utils/itti_analyzer/libresolver/resolvers.c |  8 +++++---
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c
index 7aa62a935b..5aec9cc2ec 100644
--- a/common/utils/itti/intertask_interface.c
+++ b/common/utils/itti/intertask_interface.c
@@ -402,14 +402,16 @@ static inline void itti_receive_msg_internal_event_fd(task_id_t task_id, uint8_t
         epoll_timeout = -1;
     }
 
-    epoll_ret = epoll_wait(itti_desc.tasks[thread_id].epoll_fd,
-                           itti_desc.tasks[thread_id].events,
-                           itti_desc.tasks[thread_id].nb_events,
-                           epoll_timeout);
+    do {
+        epoll_ret = epoll_wait(itti_desc.tasks[thread_id].epoll_fd,
+                               itti_desc.tasks[thread_id].events,
+                               itti_desc.tasks[thread_id].nb_events,
+                               epoll_timeout);
+    } while (epoll_ret < 0 && errno == EINTR);
 
     if (epoll_ret < 0) {
         ITTI_ERROR("epoll_wait failed for task %s: %s\n",
-        itti_get_task_name(task_id), strerror(errno));
+                   itti_get_task_name(task_id), strerror(errno));
         DevAssert(0 == 1);
     }
     if (epoll_ret == 0 && polling) {
diff --git a/common/utils/itti_analyzer/libresolver/resolvers.c b/common/utils/itti_analyzer/libresolver/resolvers.c
index 2fc2392ae0..a0e0104deb 100644
--- a/common/utils/itti_analyzer/libresolver/resolvers.c
+++ b/common/utils/itti_analyzer/libresolver/resolvers.c
@@ -101,7 +101,7 @@ int resolve_struct(types_t **head)
         if (next_type->type != TYPE_STRUCT)
             continue;
 
-//         printf("Trying to resolve struct members %s with type %d\n", next_type->name, next_type->id);
+//         g_debug("Trying to resolve struct members %s with type %d", next_type->name, next_type->id);
 
         /* Struct may have no member */
         if (next_type->members == NULL)
@@ -135,7 +135,8 @@ int resolve_struct(types_t **head)
             /* Pick up the next string available */
             member = strtok(NULL, " _");
         }
-//         next_type->type_hr_display(next_type, 0);
+
+        free(members);
     }
 
     return 0;
@@ -185,7 +186,8 @@ int resolve_union(types_t **head)
             /* Pick up the next string available */
             member = strtok(NULL, " _");
         }
-//         next_type->type_hr_display(next_type, 0);
+
+        free(members);
     }
 
     return 0;
-- 
GitLab