summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRegis Merlino <regis.merlino@intel.com>2013-04-02 16:29:42 +0200
committerLudovic Ferrandis <ludovic.ferrandis@intel.com>2013-04-04 10:38:40 +0200
commit6c70c22a7204e76fe7723ef04c727c6a1ebc95bb (patch)
tree38b958b740fc5dc6f2ae16e9e43870f36dfbdd64
parentb3cd1f7f0d81adce2e6b9232c42d55bce9b69b9e (diff)
downloaddleyna-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.c15
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");