From 7c1a32e28b9d145ee25e3d3141dee7821ba8a7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 6 Dec 2016 16:29:23 +0200 Subject: [PATCH] tagdemux: Fix crash when shutting down element during getrange() Ensure that nothing is in any of the streaming thread functions anymore when going from PAUSED to READY. While the parent's state change function has deactivated all pads, there is nothing preventing downstream from activating our srcpad again and calling the getrange() function. Although we're in READY! https://bugzilla.gnome.org/show_bug.cgi?id=775687 --- gst-libs/gst/tag/gsttagdemux.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c index f0e685d2b9..124f7887f6 100644 --- a/gst-libs/gst/tag/gsttagdemux.c +++ b/gst-libs/gst/tag/gsttagdemux.c @@ -1726,11 +1726,19 @@ gst_tag_demux_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: + /* Ensure that nothing is in any of the streaming thread functions + * anymore. While the above has deactivated all pads, there is nothing + * preventing downstream from activating our srcpad again and calling the + * getrange() function. Although we're in READY! + */ + GST_PAD_STREAM_LOCK (demux->priv->srcpad); gst_tag_demux_reset (demux); + GST_PAD_STREAM_UNLOCK (demux->priv->srcpad); break; default: break; } + return ret; }