diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index 765005dbe9..a9e802cd7b 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -1180,8 +1180,12 @@ next: } } else if (GST_IS_QUERY (data)) { GstQuery *query = GST_QUERY_CAST (data); + gboolean ret; - queue->last_query = gst_pad_peer_query (queue->srcpad, query); + GST_QUEUE_MUTEX_UNLOCK (queue); + ret = gst_pad_peer_query (queue->srcpad, query); + GST_QUEUE_MUTEX_LOCK_CHECK (queue, out_flushing_query); + queue->last_query = ret; g_cond_signal (&queue->query_handled); GST_CAT_LOG_OBJECT (queue_dataflow, queue, "did query %p, return %d", query, queue->last_query); @@ -1200,6 +1204,13 @@ out_flushing: GST_CAT_LOG_OBJECT (queue_dataflow, queue, "exit because we are flushing"); return GST_FLOW_FLUSHING; } +out_flushing_query: + { + queue->last_query = FALSE; + g_cond_signal (&queue->query_handled); + GST_CAT_LOG_OBJECT (queue_dataflow, queue, "exit because we are flushing"); + return GST_FLOW_FLUSHING; + } } static void