gstfunnel: avoid access of freed pad
authorDavid Svensson Fors <davidsf@axis.com>
Tue, 12 Jun 2012 11:26:35 +0000 (13:26 +0200)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 14 Jun 2012 13:10:22 +0000 (14:10 +0100)
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

plugins/elements/gstfunnel.c

index a15a9e6..fb4fafe 100644 (file)
@@ -229,16 +229,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;
   }