summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2013-08-19 16:38:16 +0200
committerSebastian Dröge <slomo@circular-chaos.org>2013-08-19 16:38:16 +0200
commitec1dd125c74f3b5d5b428a8fb74e08fb974e99c2 (patch)
tree721fa1d58aa770449805eb369f4b37d6c448a625 /plugins
parent48319d4be2365559d785a55c5569ff9a629e9575 (diff)
queue: Clean up after the streaming thread has stopped
https://bugzilla.gnome.org/show_bug.cgi?id=705835
Diffstat (limited to 'plugins')
-rw-r--r--plugins/elements/gstqueue.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c
index a9e802cd7..f67cc34ed 100644
--- a/plugins/elements/gstqueue.c
+++ b/plugins/elements/gstqueue.c
@@ -188,7 +188,6 @@ enum
G_DEFINE_TYPE_WITH_CODE (GstQueue, gst_queue, GST_TYPE_ELEMENT, _do_init);
static void gst_queue_finalize (GObject * object);
-
static void gst_queue_set_property (GObject * object,
guint prop_id, const GValue * value, GParamSpec * pspec);
static void gst_queue_get_property (GObject * object,
@@ -1414,8 +1413,14 @@ gst_queue_sink_activate_mode (GstPad * pad, GstObject * parent, GstPadMode mode,
/* step 1, unblock chain function */
GST_QUEUE_MUTEX_LOCK (queue);
queue->srcresult = GST_FLOW_FLUSHING;
+ GST_QUEUE_MUTEX_UNLOCK (queue);
+
+ /* step 2, wait until streaming thread stopped and flush queue */
+ GST_PAD_STREAM_LOCK (pad);
+ GST_QUEUE_MUTEX_LOCK (queue);
gst_queue_locked_flush (queue, TRUE);
GST_QUEUE_MUTEX_UNLOCK (queue);
+ GST_PAD_STREAM_UNLOCK (pad);
}
result = TRUE;
break;