From: Edward Hervey Date: Sat, 4 Nov 2017 15:13:06 +0000 (+0100) Subject: discoverer: Avoid race of adding elements while stopping X-Git-Tag: 1.16.2~1024 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9a8cb299702c6e8c01b5f4a366f7cffc6b13f97a;p=platform%2Fupstream%2Fgst-plugins-base.git discoverer: Avoid race of adding elements while stopping This would result in a lot of warnings regarding elements not being in NULL state when removed, or even leaked elements. Instead make sure we take the lock and check whether we are processing or not before allocating or adding anything to the pipeline --- diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c index 78b1399..f7d014e 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer.c +++ b/gst-libs/gst/pbutils/gstdiscoverer.c @@ -613,6 +613,14 @@ uridecodebin_pad_added_cb (GstElement * uridecodebin, GstPad * pad, GST_DEBUG_OBJECT (dc, "pad %s:%s", GST_DEBUG_PAD_NAME (pad)); + DISCO_LOCK (dc); + + if (dc->priv->running == FALSE) { + GST_DEBUG_OBJECT (dc, "We are stopping"); + DISCO_UNLOCK (dc); + return; + } + ps = g_slice_new0 (PrivateStream); ps->dc = dc; @@ -644,9 +652,7 @@ uridecodebin_pad_added_cb (GstElement * uridecodebin, GstPad * pad, gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM, (GstPadProbeCallback) got_subtitle_data, dc, NULL); g_object_set (ps->sink, "async", FALSE, NULL); - DISCO_LOCK (dc); dc->priv->pending_subtitle_pads++; - DISCO_UNLOCK (dc); } gst_caps_unref (caps); @@ -670,7 +676,6 @@ uridecodebin_pad_added_cb (GstElement * uridecodebin, GstPad * pad, gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, (GstPadProbeCallback) _event_probe, ps, NULL); - DISCO_LOCK (dc); dc->priv->streams = g_list_append (dc->priv->streams, ps); DISCO_UNLOCK (dc); @@ -687,6 +692,7 @@ error: if (ps->sink) gst_object_unref (ps->sink); g_slice_free (PrivateStream, ps); + DISCO_UNLOCK (dc); return; }