From 6c70c22a7204e76fe7723ef04c727c6a1ebc95bb Mon Sep 17 00:00:00 2001 From: Regis Merlino Date: Tue, 2 Apr 2013 16:29:42 +0200 Subject: [Processor] Handle empty queue start() Signed-off-by: Regis Merlino --- libdleyna/core/task-processor.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/libdleyna/core/task-processor.c b/libdleyna/core/task-processor.c index cb01f26..2b30e53 100644 --- a/libdleyna/core/task-processor.c +++ b/libdleyna/core/task-processor.c @@ -374,18 +374,25 @@ static gboolean prv_process_task(gpointer user_data) void dleyna_task_queue_start(const dleyna_task_queue_key_t *queue_id) { dleyna_task_queue_t *queue; + dleyna_task_processor_t *processor = queue_id->processor; DLEYNA_LOG_DEBUG("Enter - Starting queue <%s,%s>", queue_id->source, queue_id->sink); - queue = g_hash_table_lookup(queue_id->processor->task_queues, queue_id); + queue = g_hash_table_lookup(processor->task_queues, queue_id); if (queue->defer_remove) goto exit; - if (!queue->current_task && !queue->idle_id) - queue->idle_id = g_idle_add(prv_process_task, - (gpointer)queue_id); + if (queue->tasks->len > 0) { + if (!queue->current_task && !queue->idle_id) + queue->idle_id = g_idle_add(prv_process_task, + (gpointer)queue_id); + } else if (queue->flags & DLEYNA_TASK_QUEUE_FLAG_AUTO_REMOVE) { + DLEYNA_LOG_DEBUG("Removing queue <%s,%s>", + queue_id->source, queue_id->sink); + g_hash_table_remove(processor->task_queues, queue_id); + } exit: DLEYNA_LOG_DEBUG("Exit"); -- cgit v1.2.1