diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index ce6803d16b..0f8531a56f 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -117,7 +117,7 @@ static int node_consumer_wait_count(fifo_node_t *node) static void node_remove_uuid(fifo_node_t *node, const char *uuid) { - int i, len = 0; + int i, len = 0, done = 0; void *pop = NULL; for (i = 0; i < MAX_PRI; i++) { @@ -126,18 +126,17 @@ static void node_remove_uuid(fifo_node_t *node, const char *uuid) } while(len) { if (switch_queue_trypop(node->fifo_list[i], &pop) == SWITCH_STATUS_SUCCESS && pop) { - if (!strcmp((char *)pop, uuid)) { + if (!done && !strcmp((char *)pop, uuid)) { free(pop); - goto end; + done++; + } else { + switch_queue_push(node->fifo_list[i], pop); } - switch_queue_push(node->fifo_list[i], pop); } len--; } } - end: - if (!node_consumer_wait_count(node)) { node->start_waiting = 0; }