mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
splitmuxsink: Fix GObject warnings on shutdown.
Commit 83e718 added a pad template to splitmux request pads, which means that GstElement now releases the pads on dispose, but after having removed all elements in the bin and unlinked them. Make sure we can handle cleanup in that case without throwing assertions. https://bugzilla.gnome.org/show_bug.cgi?id=773784
This commit is contained in:
parent
afc440e906
commit
8ff5dd8029
1 changed files with 18 additions and 10 deletions
|
@ -289,11 +289,11 @@ gst_splitmux_sink_dispose (GObject * object)
|
||||||
{
|
{
|
||||||
GstSplitMuxSink *splitmux = GST_SPLITMUX_SINK (object);
|
GstSplitMuxSink *splitmux = GST_SPLITMUX_SINK (object);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
|
||||||
|
|
||||||
/* Calling parent dispose invalidates all child pointers */
|
/* Calling parent dispose invalidates all child pointers */
|
||||||
splitmux->sink = splitmux->active_sink = splitmux->muxer = splitmux->mq =
|
splitmux->sink = splitmux->active_sink = splitmux->muxer = splitmux->mq =
|
||||||
NULL;
|
NULL;
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1479,7 +1479,7 @@ static void
|
||||||
gst_splitmux_sink_release_pad (GstElement * element, GstPad * pad)
|
gst_splitmux_sink_release_pad (GstElement * element, GstPad * pad)
|
||||||
{
|
{
|
||||||
GstSplitMuxSink *splitmux = (GstSplitMuxSink *) element;
|
GstSplitMuxSink *splitmux = (GstSplitMuxSink *) element;
|
||||||
GstPad *mqsink, *mqsrc, *muxpad;
|
GstPad *mqsink, *mqsrc = NULL, *muxpad = NULL;
|
||||||
MqStreamCtx *ctx =
|
MqStreamCtx *ctx =
|
||||||
(MqStreamCtx *) (g_object_get_qdata ((GObject *) (pad), PAD_CONTEXT));
|
(MqStreamCtx *) (g_object_get_qdata ((GObject *) (pad), PAD_CONTEXT));
|
||||||
|
|
||||||
|
@ -1491,8 +1491,11 @@ gst_splitmux_sink_release_pad (GstElement * element, GstPad * pad)
|
||||||
GST_INFO_OBJECT (pad, "releasing request pad");
|
GST_INFO_OBJECT (pad, "releasing request pad");
|
||||||
|
|
||||||
mqsink = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
mqsink = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||||
mqsrc = mq_sink_to_src (splitmux->mq, mqsink);
|
/* The ghostpad target might have disappeared during pipeline destruct */
|
||||||
muxpad = gst_pad_get_peer (mqsrc);
|
if (mqsink)
|
||||||
|
mqsrc = mq_sink_to_src (splitmux->mq, mqsink);
|
||||||
|
if (mqsrc)
|
||||||
|
muxpad = gst_pad_get_peer (mqsrc);
|
||||||
|
|
||||||
/* Remove the context from our consideration */
|
/* Remove the context from our consideration */
|
||||||
splitmux->contexts = g_list_remove (splitmux->contexts, ctx);
|
splitmux->contexts = g_list_remove (splitmux->contexts, ctx);
|
||||||
|
@ -1509,14 +1512,19 @@ gst_splitmux_sink_release_pad (GstElement * element, GstPad * pad)
|
||||||
splitmux->reference_ctx = NULL;
|
splitmux->reference_ctx = NULL;
|
||||||
|
|
||||||
/* Release and free the mq input */
|
/* Release and free the mq input */
|
||||||
gst_element_release_request_pad (splitmux->mq, mqsink);
|
if (mqsink) {
|
||||||
|
gst_element_release_request_pad (splitmux->mq, mqsink);
|
||||||
|
gst_object_unref (mqsink);
|
||||||
|
}
|
||||||
|
|
||||||
/* Release and free the muxer input */
|
/* Release and free the muxer input */
|
||||||
gst_element_release_request_pad (splitmux->muxer, muxpad);
|
if (muxpad) {
|
||||||
|
gst_element_release_request_pad (splitmux->muxer, muxpad);
|
||||||
|
gst_object_unref (muxpad);
|
||||||
|
}
|
||||||
|
|
||||||
gst_object_unref (mqsink);
|
if (mqsrc)
|
||||||
gst_object_unref (mqsrc);
|
gst_object_unref (mqsrc);
|
||||||
gst_object_unref (muxpad);
|
|
||||||
|
|
||||||
if (GST_PAD_PAD_TEMPLATE (pad) &&
|
if (GST_PAD_PAD_TEMPLATE (pad) &&
|
||||||
g_str_equal (GST_PAD_TEMPLATE_NAME_TEMPLATE (GST_PAD_PAD_TEMPLATE (pad)),
|
g_str_equal (GST_PAD_TEMPLATE_NAME_TEMPLATE (GST_PAD_PAD_TEMPLATE (pad)),
|
||||||
|
|
Loading…
Reference in a new issue