mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 05:16:13 +00:00
gstfunnel: avoid access of freed pad
Save the value of the pad's got_eos in gst_funnel_release_pad, before calling gst_element_remove_pad. This is because gst_element_remove_pad may free the pad. https://bugzilla.gnome.org/show_bug.cgi?id=678017
This commit is contained in:
parent
c65eebe28c
commit
066b515985
1 changed files with 4 additions and 1 deletions
|
@ -229,16 +229,19 @@ gst_funnel_release_pad (GstElement * element, GstPad * pad)
|
||||||
{
|
{
|
||||||
GstFunnel *funnel = GST_FUNNEL (element);
|
GstFunnel *funnel = GST_FUNNEL (element);
|
||||||
GstFunnelPad *fpad = GST_FUNNEL_PAD_CAST (pad);
|
GstFunnelPad *fpad = GST_FUNNEL_PAD_CAST (pad);
|
||||||
|
gboolean got_eos;
|
||||||
gboolean send_eos = FALSE;
|
gboolean send_eos = FALSE;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (funnel, "releasing pad");
|
GST_DEBUG_OBJECT (funnel, "releasing pad");
|
||||||
|
|
||||||
gst_pad_set_active (pad, FALSE);
|
gst_pad_set_active (pad, FALSE);
|
||||||
|
|
||||||
|
got_eos = fpad->got_eos;
|
||||||
|
|
||||||
gst_element_remove_pad (GST_ELEMENT_CAST (funnel), pad);
|
gst_element_remove_pad (GST_ELEMENT_CAST (funnel), pad);
|
||||||
|
|
||||||
GST_OBJECT_LOCK (funnel);
|
GST_OBJECT_LOCK (funnel);
|
||||||
if (!fpad->got_eos && gst_funnel_all_sinkpads_eos_unlocked (funnel)) {
|
if (!got_eos && gst_funnel_all_sinkpads_eos_unlocked (funnel)) {
|
||||||
GST_DEBUG_OBJECT (funnel, "Pad removed. All others are EOS. Sending EOS");
|
GST_DEBUG_OBJECT (funnel, "Pad removed. All others are EOS. Sending EOS");
|
||||||
send_eos = TRUE;
|
send_eos = TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue