(multi)queue: Don't access query items during flushing
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 27 May 2013 14:38:18 +0000 (16:38 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 27 May 2013 14:38:18 +0000 (16:38 +0200)
plugins/elements/gstmultiqueue.c
plugins/elements/gstqueue.c

index 9a87e2c..9e9209c 100644 (file)
@@ -1967,6 +1967,7 @@ static void
 gst_single_queue_flush_queue (GstSingleQueue * sq, gboolean full)
 {
   GstDataQueueItem *sitem;
+  GstMultiQueueItem *mitem;
   gboolean was_flushing = FALSE;
 
   while (!gst_data_queue_is_empty (sq->queue)) {
@@ -1982,10 +1983,13 @@ gst_single_queue_flush_queue (GstSingleQueue * sq, gboolean full)
       continue;
     }
 
+    mitem = (GstMultiQueueItem *) sitem;
+
     data = sitem->object;
 
-    if (!full && GST_IS_EVENT (data) && GST_EVENT_IS_STICKY (data) &&
-        GST_EVENT_TYPE (data) != GST_EVENT_SEGMENT
+    if (!full && !mitem->is_query && GST_IS_EVENT (data)
+        && GST_EVENT_IS_STICKY (data)
+        && GST_EVENT_TYPE (data) != GST_EVENT_SEGMENT
         && GST_EVENT_TYPE (data) != GST_EVENT_EOS) {
       gst_pad_store_sticky_event (sq->srcpad, GST_EVENT_CAST (data));
     }
index aae51aa..765005d 100644 (file)
@@ -589,7 +589,8 @@ gst_queue_locked_flush (GstQueue * queue, gboolean full)
 
     /* Then lose another reference because we are supposed to destroy that
        data when flushing */
-    if (!full && GST_IS_EVENT (qitem->item) && GST_EVENT_IS_STICKY (qitem->item)
+    if (!full && !qitem->is_query && GST_IS_EVENT (qitem->item)
+        && GST_EVENT_IS_STICKY (qitem->item)
         && GST_EVENT_TYPE (qitem->item) != GST_EVENT_SEGMENT
         && GST_EVENT_TYPE (qitem->item) != GST_EVENT_EOS) {
       gst_pad_store_sticky_event (queue->srcpad, GST_EVENT_CAST (qitem->item));