diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index e116aa2793..52475f9350 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -821,9 +821,19 @@ out_flushing: static gboolean gst_queue_is_empty (GstQueue * queue) { + GstMiniObject *head; + if (queue->queue->length == 0) return TRUE; + /* Only consider the queue empty if the minimum thresholds + * are not reached and data is at the queue head. Otherwise + * we would block forever on serialized queries. + */ + head = queue->queue->array[queue->queue->head]; + if (!GST_IS_BUFFER (head) && !GST_IS_BUFFER_LIST (head)) + return FALSE; + /* It is possible that a max size is reached before all min thresholds are. * Therefore, only consider it empty if it is not filled. */ return ((queue->min_threshold.buffers > 0 &&