Commit 90e86b86 authored by Edward Hervey's avatar Edward Hervey 🤘 Committed by Edward Hervey

urisourcebin: Avoid races when setting up typefind

The state of urisourcebin (and all elements contained within) can
change at any point in time, including when setting up the typefind
element.

In order to avoid ending up with typefind starting without being fully
connected, lock the state and connect to the 'have-type' signal.
parent d0c1b342
......@@ -1996,6 +1996,9 @@ setup_typefind (GstURISourceBin * urisrc, GstPad * srcpad)
if (!typefind)
goto no_typefind;
/* Make sure the bin doesn't set the typefind running yet */
gst_element_set_locked_state (typefind, TRUE);
gst_bin_add (GST_BIN_CAST (urisrc), typefind);
if (!srcpad) {
......@@ -2011,14 +2014,16 @@ setup_typefind (GstURISourceBin * urisrc, GstPad * srcpad)
goto could_not_link;
}
gst_element_sync_state_with_parent (typefind);
urisrc->typefinds = g_list_append (urisrc->typefinds, typefind);
/* connect a signal to find out when the typefind element found
* a type */
g_signal_connect (typefind, "have-type", G_CALLBACK (type_found), urisrc);
/* Now it can start */
gst_element_set_locked_state (typefind, FALSE);
gst_element_sync_state_with_parent (typefind);
return TRUE;
/* ERRORS */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment