multiqueue: Clean up after the streaming thread has stopped
authorSebastian Dröge <slomo@circular-chaos.org>
Mon, 19 Aug 2013 14:38:50 +0000 (16:38 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Mon, 19 Aug 2013 14:38:50 +0000 (16:38 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=705835

plugins/elements/gstmultiqueue.c

index 7a9cd5f..a83220d 100644 (file)
@@ -1474,7 +1474,19 @@ gst_multi_queue_sink_activate_mode (GstPad * pad, GstObject * parent,
         sq->last_query = FALSE;
         g_cond_signal (&sq->query_handled);
         gst_data_queue_set_flushing (sq->queue, TRUE);
+
+        /* Wait until streaming thread has finished */
+        if (mq)
+          GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
+        GST_PAD_STREAM_LOCK (pad);
+        if (mq)
+          GST_MULTI_QUEUE_MUTEX_LOCK (mq);
         gst_data_queue_flush (sq->queue);
+        if (mq)
+          GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
+        GST_PAD_STREAM_UNLOCK (pad);
+        if (mq)
+          GST_MULTI_QUEUE_MUTEX_LOCK (mq);
       }
       res = TRUE;
       break;