diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2013-08-19 16:38:16 +0200 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2013-08-19 16:38:16 +0200 |
commit | ec1dd125c74f3b5d5b428a8fb74e08fb974e99c2 (patch) | |
tree | 721fa1d58aa770449805eb369f4b37d6c448a625 /plugins | |
parent | 48319d4be2365559d785a55c5569ff9a629e9575 (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.c | 7 |
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; |