diff options
author | Regis Merlino <regis.merlino@intel.com> | 2013-04-02 16:29:42 +0200 |
---|---|---|
committer | Ludovic Ferrandis <ludovic.ferrandis@intel.com> | 2013-04-04 10:38:40 +0200 |
commit | 6c70c22a7204e76fe7723ef04c727c6a1ebc95bb (patch) | |
tree | 38b958b740fc5dc6f2ae16e9e43870f36dfbdd64 | |
parent | b3cd1f7f0d81adce2e6b9232c42d55bce9b69b9e (diff) | |
download | dleyna-core-6c70c22a7204e76fe7723ef04c727c6a1ebc95bb.tar.gz |
[Processor] Handle empty queue start()
Signed-off-by: Regis Merlino <regis.merlino@intel.com>
-rw-r--r-- | libdleyna/core/task-processor.c | 15 |
1 files 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"); |