From: Thibault Saunier Date: Wed, 13 May 2020 21:07:43 +0000 (-0400) Subject: inputselector: Never reset active pad set from the user X-Git-Tag: 1.19.3~868 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9f2e9ccd7ef3c19447f5667e6fdc8176a3f319e1;p=platform%2Fupstream%2Fgstreamer.git inputselector: Never reset active pad set from the user This was leading to interesting races in a GES test. Related to: https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/issues/108 Part-of: --- diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c index 25b4e7f..099ae35 100644 --- a/plugins/elements/gstinputselector.c +++ b/plugins/elements/gstinputselector.c @@ -1427,6 +1427,7 @@ gst_input_selector_set_property (GObject * object, guint prop_id, GST_INPUT_SELECTOR_LOCK (sel); + sel->active_sinkpad_from_user = ! !pad; #if DEBUG_CACHED_BUFFERS gst_input_selector_debug_cached_buffers (sel); #endif @@ -1814,6 +1815,7 @@ gst_input_selector_release_pad (GstElement * element, GstPad * pad) GST_DEBUG_OBJECT (sel, "Deactivating pad %s:%s", GST_DEBUG_PAD_NAME (pad)); gst_object_unref (sel->active_sinkpad); sel->active_sinkpad = NULL; + sel->active_sinkpad_from_user = FALSE; } sel->n_pads--; GST_INPUT_SELECTOR_UNLOCK (sel); @@ -1829,7 +1831,7 @@ gst_input_selector_reset (GstInputSelector * sel) GST_INPUT_SELECTOR_LOCK (sel); /* clear active pad */ - if (sel->active_sinkpad) { + if (sel->active_sinkpad && !sel->active_sinkpad_from_user) { gst_object_unref (sel->active_sinkpad); sel->active_sinkpad = NULL; } diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h index 3dff175..9d2eb6a 100644 --- a/plugins/elements/gstinputselector.h +++ b/plugins/elements/gstinputselector.h @@ -65,7 +65,8 @@ struct _GstInputSelector { GstPad *srcpad; - GstPad *active_sinkpad; + gboolean active_sinkpad_from_user; + GstPad* active_sinkpad; guint n_pads; /* number of pads */ guint padcount; /* sequence number for pads */ gboolean sync_streams;