From c36748177f62c9f088a0068d9387d640b8d30174 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Thu, 29 Mar 2012 17:43:17 +0200 Subject: [PATCH] queue: Don't unref GstQuery travelling through the queue Unlike events and buffers, the reference is not given to us --- plugins/elements/gstqueue.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index 515d432..69b7e3b 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -442,8 +442,10 @@ gst_queue_finalize (GObject * object) GST_DEBUG_OBJECT (queue, "finalizing queue"); - while ((data = g_queue_pop_head (&queue->queue))) - gst_mini_object_unref (data); + while ((data = g_queue_pop_head (&queue->queue))) { + if (!GST_IS_QUERY (data)) + gst_mini_object_unref (data); + } g_queue_clear (&queue->queue); g_mutex_clear (&queue->qlock); @@ -557,7 +559,8 @@ gst_queue_locked_flush (GstQueue * queue) while ((data = g_queue_pop_head (&queue->queue))) { /* Then lose another reference because we are supposed to destroy that data when flushing */ - gst_mini_object_unref (data); + if (!GST_IS_QUERY (data)) + gst_mini_object_unref (data); } GST_QUEUE_CLEAR_LEVEL (queue->cur_level); queue->min_threshold.buffers = queue->orig_min_threshold.buffers; @@ -853,7 +856,8 @@ gst_queue_leak_downstream (GstQueue * queue) GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "queue is full, leaking item %p on downstream end", leak); - gst_mini_object_unref (leak); + if (!GST_IS_QUERY (leak)) + gst_mini_object_unref (leak); /* last buffer needs to get a DISCONT flag */ queue->head_needs_discont = TRUE; -- 2.7.4