mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
Check that collectpads exists before removing pad
The core now calls release pad from finalize, at which point the collectpads might have already been freed.
This commit is contained in:
parent
13d441315f
commit
8e6b876e76
6 changed files with 23 additions and 6 deletions
|
@ -208,6 +208,7 @@ gst_text_overlay_finalize (GObject * object)
|
||||||
|
|
||||||
gst_collect_pads_stop (overlay->collect);
|
gst_collect_pads_stop (overlay->collect);
|
||||||
gst_object_unref (overlay->collect);
|
gst_object_unref (overlay->collect);
|
||||||
|
overlay->collect = NULL;
|
||||||
|
|
||||||
g_free (overlay->text_fill_image);
|
g_free (overlay->text_fill_image);
|
||||||
g_free (overlay->text_outline_image);
|
g_free (overlay->text_outline_image);
|
||||||
|
@ -631,7 +632,9 @@ gst_text_overlay_text_pad_unlinked (GstPad * pad)
|
||||||
GST_DEBUG_OBJECT (overlay, "Text pad unlinked");
|
GST_DEBUG_OBJECT (overlay, "Text pad unlinked");
|
||||||
|
|
||||||
if (overlay->text_collect_data) {
|
if (overlay->text_collect_data) {
|
||||||
|
if (overlay->collect) {
|
||||||
gst_collect_pads_remove_pad (overlay->collect, overlay->text_sinkpad);
|
gst_collect_pads_remove_pad (overlay->collect, overlay->text_sinkpad);
|
||||||
|
}
|
||||||
overlay->text_collect_data = NULL;
|
overlay->text_collect_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -285,6 +285,7 @@ gst_avi_mux_finalize (GObject * object)
|
||||||
mux->idx = NULL;
|
mux->idx = NULL;
|
||||||
|
|
||||||
gst_object_unref (mux->collect);
|
gst_object_unref (mux->collect);
|
||||||
|
mux->collect = NULL;
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
@ -1089,7 +1090,9 @@ gst_avi_mux_release_pad (GstElement * element, GstPad * pad)
|
||||||
* as it also represent number of streams present */
|
* as it also represent number of streams present */
|
||||||
avipad->collect = NULL;
|
avipad->collect = NULL;
|
||||||
GST_DEBUG_OBJECT (avimux, "removed pad '%s'", GST_PAD_NAME (pad));
|
GST_DEBUG_OBJECT (avimux, "removed pad '%s'", GST_PAD_NAME (pad));
|
||||||
|
if (avimux->collect) {
|
||||||
gst_collect_pads_remove_pad (avimux->collect, pad);
|
gst_collect_pads_remove_pad (avimux->collect, pad);
|
||||||
|
}
|
||||||
gst_element_remove_pad (element, pad);
|
gst_element_remove_pad (element, pad);
|
||||||
/* if not started yet, we can remove any sign this pad ever existed */
|
/* if not started yet, we can remove any sign this pad ever existed */
|
||||||
/* in this case _start will take care of the real pad count */
|
/* in this case _start will take care of the real pad count */
|
||||||
|
|
|
@ -207,6 +207,7 @@ gst_flv_mux_finalize (GObject * object)
|
||||||
GstFlvMux *mux = GST_FLV_MUX (object);
|
GstFlvMux *mux = GST_FLV_MUX (object);
|
||||||
|
|
||||||
gst_object_unref (mux->collect);
|
gst_object_unref (mux->collect);
|
||||||
|
mux->collect = NULL;
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
@ -559,7 +560,9 @@ gst_flv_mux_release_pad (GstElement * element, GstPad * pad)
|
||||||
if (cpad && cpad->video_codec_data)
|
if (cpad && cpad->video_codec_data)
|
||||||
gst_buffer_unref (cpad->video_codec_data);
|
gst_buffer_unref (cpad->video_codec_data);
|
||||||
|
|
||||||
|
if (mux->collect) {
|
||||||
gst_collect_pads_remove_pad (mux->collect, pad);
|
gst_collect_pads_remove_pad (mux->collect, pad);
|
||||||
|
}
|
||||||
gst_element_remove_pad (element, pad);
|
gst_element_remove_pad (element, pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -598,7 +598,9 @@ gst_interleave_release_pad (GstElement * element, GstPad * pad)
|
||||||
|
|
||||||
GST_OBJECT_UNLOCK (self->collect);
|
GST_OBJECT_UNLOCK (self->collect);
|
||||||
|
|
||||||
|
if (self->collect) {
|
||||||
gst_collect_pads_remove_pad (self->collect, pad);
|
gst_collect_pads_remove_pad (self->collect, pad);
|
||||||
|
}
|
||||||
gst_element_remove_pad (element, pad);
|
gst_element_remove_pad (element, pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -385,6 +385,7 @@ gst_matroska_mux_finalize (GObject * object)
|
||||||
GstMatroskaMux *mux = GST_MATROSKA_MUX (object);
|
GstMatroskaMux *mux = GST_MATROSKA_MUX (object);
|
||||||
|
|
||||||
gst_object_unref (mux->collect);
|
gst_object_unref (mux->collect);
|
||||||
|
mux->collect = NULL;
|
||||||
gst_object_unref (mux->ebml_write);
|
gst_object_unref (mux->ebml_write);
|
||||||
if (mux->writing_app)
|
if (mux->writing_app)
|
||||||
g_free (mux->writing_app);
|
g_free (mux->writing_app);
|
||||||
|
@ -1929,7 +1930,9 @@ gst_matroska_mux_release_pad (GstElement * element, GstPad * pad)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mux->collect) {
|
||||||
gst_collect_pads_remove_pad (mux->collect, pad);
|
gst_collect_pads_remove_pad (mux->collect, pad);
|
||||||
|
}
|
||||||
if (gst_element_remove_pad (element, pad))
|
if (gst_element_remove_pad (element, pad))
|
||||||
mux->num_streams--;
|
mux->num_streams--;
|
||||||
}
|
}
|
||||||
|
|
|
@ -777,6 +777,7 @@ gst_videomixer_finalize (GObject * object)
|
||||||
GstVideoMixer *mix = GST_VIDEO_MIXER (object);
|
GstVideoMixer *mix = GST_VIDEO_MIXER (object);
|
||||||
|
|
||||||
gst_object_unref (mix->collect);
|
gst_object_unref (mix->collect);
|
||||||
|
mix->collect = NULL;
|
||||||
g_mutex_free (mix->state_lock);
|
g_mutex_free (mix->state_lock);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
|
@ -1251,7 +1252,9 @@ gst_videomixer_release_pad (GstElement * element, GstPad * pad)
|
||||||
|
|
||||||
mix->sinkpads = g_slist_remove (mix->sinkpads, pad);
|
mix->sinkpads = g_slist_remove (mix->sinkpads, pad);
|
||||||
gst_videomixer_collect_free (mixpad->mixcol);
|
gst_videomixer_collect_free (mixpad->mixcol);
|
||||||
|
if (mix->collect) {
|
||||||
gst_collect_pads_remove_pad (mix->collect, pad);
|
gst_collect_pads_remove_pad (mix->collect, pad);
|
||||||
|
}
|
||||||
gst_child_proxy_child_removed (GST_OBJECT (mix), GST_OBJECT (mixpad));
|
gst_child_proxy_child_removed (GST_OBJECT (mix), GST_OBJECT (mixpad));
|
||||||
/* determine possibly new geometry and master */
|
/* determine possibly new geometry and master */
|
||||||
gst_videomixer_set_master_geometry (mix);
|
gst_videomixer_set_master_geometry (mix);
|
||||||
|
|
Loading…
Reference in a new issue