From 7535f20c31100654512ce413626c387553f17fa7 Mon Sep 17 00:00:00 2001 From: winckel <winckel@eurecom.fr> Date: Thu, 7 Nov 2013 14:53:17 +0000 Subject: [PATCH] Solved a race issue between event and message in ITTI with ENABLE_EVEN_FD. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4346 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- common/utils/itti/intertask_interface.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index 5aec9cc2ec..0f58e2fb32 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -61,9 +61,9 @@ int itti_debug = 0; -#define ITTI_DEBUG(x, args...) do { if (itti_debug) fprintf(stdout, "[ITTI][D]"x, ##args); } \ +#define ITTI_DEBUG(x, args...) do { if (itti_debug) fprintf(stdout, "[ITTI][D]"x, ##args); fflush (stdout); } \ while(0) -#define ITTI_ERROR(x, args...) do { fprintf(stdout, "[ITTI][E]"x, ##args); } \ +#define ITTI_ERROR(x, args...) do { fprintf(stdout, "[ITTI][E]"x, ##args); fflush (stdout); } \ while(0) /* Global message size */ @@ -264,10 +264,10 @@ int itti_send_msg_to_task(task_id_t task_id, instance_t instance, MessageDef *me { uint64_t sem_counter = 1; + lfds611_queue_enqueue(itti_desc.tasks[thread_id].message_queue, new); + /* Call to write for an event fd must be of 8 bytes */ write(itti_desc.tasks[thread_id].task_event_fd, &sem_counter, sizeof(sem_counter)); - - lfds611_queue_enqueue(itti_desc.tasks[thread_id].message_queue, new); } #else if (STAILQ_EMPTY (&itti_desc.tasks[thread_id].message_queue)) { @@ -422,7 +422,7 @@ static inline void itti_receive_msg_internal_event_fd(task_id_t task_id, uint8_t itti_desc.tasks[thread_id].epoll_nb_events = epoll_ret; for (i = 0; i < epoll_ret; i++) { - /* Check if there is an event for the ITTI for the event fd */ + /* Check if there is an event for ITTI for the event fd */ if ((itti_desc.tasks[thread_id].events[i].events & EPOLLIN) && (itti_desc.tasks[thread_id].events[i].data.fd == itti_desc.tasks[thread_id].task_event_fd)) { @@ -430,16 +430,14 @@ static inline void itti_receive_msg_internal_event_fd(task_id_t task_id, uint8_t uint64_t sem_counter; /* Read will always return 1 */ - read(itti_desc.tasks[thread_id].task_event_fd, &sem_counter, sizeof(sem_counter)); + read (itti_desc.tasks[thread_id].task_event_fd, &sem_counter, sizeof(sem_counter)); - if (lfds611_queue_dequeue(itti_desc.tasks[thread_id].message_queue, - (void **)&message) == 0) - { + if (lfds611_queue_dequeue (itti_desc.tasks[thread_id].message_queue, (void **) &message) == 0) { /* No element in list -> this should not happen */ - DevMessage("No element in message queue..."); + DevParam(thread_id, task_id, epoll_ret); } *received_msg = message->msg; - free(message); + free (message); return; } } -- GitLab