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:
David Svensson Fors 2012-06-12 13:26:35 +02:00 committed by Vincent Penquerc'h
parent 321af1ccb8
commit 70a95ff5c7

View file

@ -256,16 +256,19 @@ gst_funnel_release_pad (GstElement * element, GstPad * pad)
{
GstFunnel *funnel = GST_FUNNEL (element);
GstFunnelPad *fpad = GST_FUNNEL_PAD_CAST (pad);
gboolean got_eos;
gboolean send_eos = FALSE;
GST_DEBUG_OBJECT (funnel, "releasing pad");
gst_pad_set_active (pad, FALSE);
got_eos = fpad->got_eos;
gst_element_remove_pad (GST_ELEMENT_CAST (funnel), pad);
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");
send_eos = TRUE;
}