diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index 5b042baf12916fd7817db6950b9021c5d9ba2423..a6d3f2806d073c76cf26c97bafd20427d513e64f 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -241,48 +241,50 @@ int itti_send_msg_to_task(task_id_t task_id, instance_t instance, MessageDef *me priority = itti_get_message_priority (message_id); - /* We cannot send a message if the task is not running */ - DevCheck(itti_desc.threads[thread_id].task_state == TASK_STATE_READY, itti_desc.threads[thread_id].task_state, - TASK_STATE_READY, thread_id); + /* Increment the global message number */ + message_number = itti_increment_message_number (); -#if !defined(ENABLE_EVENT_FD) - /* Lock the mutex to get exclusive access to the list */ - pthread_mutex_lock (&itti_desc.tasks[task_id].message_queue_mutex); + itti_dump_queue_message (message_number, message, itti_desc.messages_info[message_id].name, + MESSAGE_SIZE(message_id)); - /* Check the number of messages in the queue */ - DevCheck(itti_desc.tasks[task_id].message_in_queue < itti_desc.tasks_info[task_id].queue_size, - task_id, itti_desc.tasks[task_id].message_in_queue, itti_desc.tasks_info[task_id].queue_size); -#endif + if (task_id != TASK_UNKNOWN) + { + /* We cannot send a message if the task is not running */ + DevCheck(itti_desc.threads[thread_id].task_state == TASK_STATE_READY, itti_desc.threads[thread_id].task_state, + TASK_STATE_READY, thread_id); - /* Allocate new list element */ - new = (struct message_list_s *) malloc (sizeof(struct message_list_s)); - DevAssert(new != NULL); +#if !defined(ENABLE_EVENT_FD) + /* Lock the mutex to get exclusive access to the list */ + pthread_mutex_lock (&itti_desc.tasks[task_id].message_queue_mutex); - /* Increment the global message number */ - message_number = itti_increment_message_number (); + /* Check the number of messages in the queue */ + DevCheck(itti_desc.tasks[task_id].message_in_queue < itti_desc.tasks_info[task_id].queue_size, + task_id, itti_desc.tasks[task_id].message_in_queue, itti_desc.tasks_info[task_id].queue_size); +#endif - /* Fill in members */ - new->msg = message; - new->message_number = message_number; - new->message_priority = priority; + /* Allocate new list element */ + new = (struct message_list_s *) malloc (sizeof(struct message_list_s)); + DevAssert(new != NULL); - itti_dump_queue_message (message_number, message, itti_desc.messages_info[message_id].name, - MESSAGE_SIZE(message_id)); + /* Fill in members */ + new->msg = message; + new->message_number = message_number; + new->message_priority = priority; #if defined(ENABLE_EVENT_FD) - { - uint64_t sem_counter = 1; + { + uint64_t sem_counter = 1; - lfds611_queue_enqueue(itti_desc.tasks[task_id].message_queue, new); + lfds611_queue_enqueue(itti_desc.tasks[task_id].message_queue, new); - /* Call to write for an event fd must be of 8 bytes */ - write(itti_desc.tasks[task_id].task_event_fd, &sem_counter, sizeof(sem_counter)); - } + /* Call to write for an event fd must be of 8 bytes */ + write(itti_desc.tasks[task_id].task_event_fd, &sem_counter, sizeof(sem_counter)); + } #else - if (STAILQ_EMPTY (&itti_desc.tasks[task_id].message_queue)) { - STAILQ_INSERT_HEAD (&itti_desc.tasks[task_id].message_queue, new, next_element); - } - else { + if (STAILQ_EMPTY (&itti_desc.tasks[task_id].message_queue)) { + STAILQ_INSERT_HEAD (&itti_desc.tasks[task_id].message_queue, new, next_element); + } + else { // struct message_list_s *insert_after = NULL; // struct message_list_s *temp; // @@ -306,17 +308,18 @@ int itti_send_msg_to_task(task_id_t task_id, instance_t instance, MessageDef *me // STAILQ_INSERT_AFTER(&itti_desc.tasks[task_id].message_queue, insert_after, new, // next_element); // } - } + } - /* Update the number of messages in the queue */ - itti_desc.tasks[task_id].message_in_queue++; - if (itti_desc.tasks[task_id].message_in_queue == 1) { - /* Emit a signal to wake up target task thread */ - pthread_cond_signal (&itti_desc.tasks[task_id].message_queue_cond_var); - } - /* Release the mutex */ - pthread_mutex_unlock (&itti_desc.tasks[task_id].message_queue_mutex); + /* Update the number of messages in the queue */ + itti_desc.tasks[task_id].message_in_queue++; + if (itti_desc.tasks[task_id].message_in_queue == 1) { + /* Emit a signal to wake up target task thread */ + pthread_cond_signal (&itti_desc.tasks[task_id].message_queue_cond_var); + } + /* Release the mutex */ + pthread_mutex_unlock (&itti_desc.tasks[task_id].message_queue_mutex); #endif + } ITTI_DEBUG( "Message %s, number %lu with priority %d successfully sent to queue (%u:%s)\n",