mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-18 13:25:56 +00:00
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
This commit is contained in:
parent
c81e3e6fce
commit
9a8cb29970
1 changed files with 9 additions and 3 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue