mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-10 17:35:59 +00:00
input-selector: Wake up blocking pads when releasing them
Otherwise deactivating them will cause a deadlock as they're blocking inside the streaming thread. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/601 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/652>
This commit is contained in:
parent
4b0bac94ec
commit
bc81eaf103
1 changed files with 9 additions and 0 deletions
|
@ -1821,9 +1821,11 @@ gst_input_selector_request_new_pad (GstElement * element,
|
||||||
static void
|
static void
|
||||||
gst_input_selector_release_pad (GstElement * element, GstPad * pad)
|
gst_input_selector_release_pad (GstElement * element, GstPad * pad)
|
||||||
{
|
{
|
||||||
|
GstSelectorPad *selpad;
|
||||||
GstInputSelector *sel;
|
GstInputSelector *sel;
|
||||||
|
|
||||||
sel = GST_INPUT_SELECTOR (element);
|
sel = GST_INPUT_SELECTOR (element);
|
||||||
|
selpad = GST_SELECTOR_PAD (pad);
|
||||||
GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad));
|
GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad));
|
||||||
|
|
||||||
GST_INPUT_SELECTOR_LOCK (sel);
|
GST_INPUT_SELECTOR_LOCK (sel);
|
||||||
|
@ -1834,6 +1836,13 @@ gst_input_selector_release_pad (GstElement * element, GstPad * pad)
|
||||||
sel->active_sinkpad = NULL;
|
sel->active_sinkpad = NULL;
|
||||||
sel->active_sinkpad_from_user = FALSE;
|
sel->active_sinkpad_from_user = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* wake up the pad if it's currently waiting for EOS or a running time to be
|
||||||
|
* reached. Otherwise we'll deadlock on the streaming thread further below
|
||||||
|
* when deactivating the pad. */
|
||||||
|
selpad->flushing = TRUE;
|
||||||
|
GST_INPUT_SELECTOR_BROADCAST (sel);
|
||||||
|
|
||||||
sel->n_pads--;
|
sel->n_pads--;
|
||||||
GST_INPUT_SELECTOR_UNLOCK (sel);
|
GST_INPUT_SELECTOR_UNLOCK (sel);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue