base: Unref events if the parent element disappeared
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 8 Apr 2011 12:55:09 +0000 (14:55 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 8 Apr 2011 12:57:05 +0000 (14:57 +0200)
And also unref events if the basetransform subclass has no
event handler and the event is not forwarded at all.

libs/gst/base/gstbasesrc.c
libs/gst/base/gstbasetransform.c

index 595c467..8db41f6 100644 (file)
@@ -1759,8 +1759,11 @@ gst_base_src_event_handler (GstPad * pad, GstEvent * event)
   gboolean result = FALSE;
 
   src = GST_BASE_SRC (gst_pad_get_parent (pad));
-  if (G_UNLIKELY (src == NULL))
+  if (G_UNLIKELY (src == NULL)) {
+    gst_event_unref (event);
     return FALSE;
+  }
+
   bclass = GST_BASE_SRC_GET_CLASS (src);
 
   if (bclass->event) {
index 95d0f45..8875336 100644 (file)
@@ -2085,13 +2085,17 @@ gst_base_transform_src_event (GstPad * pad, GstEvent * event)
   gboolean ret = TRUE;
 
   trans = GST_BASE_TRANSFORM (gst_pad_get_parent (pad));
-  if (G_UNLIKELY (trans == NULL))
+  if (G_UNLIKELY (trans == NULL)) {
+    gst_event_unref (event);
     return FALSE;
+  }
 
   bclass = GST_BASE_TRANSFORM_GET_CLASS (trans);
 
   if (bclass->src_event)
     ret = bclass->src_event (trans, event);
+  else
+    gst_event_unref (event);
 
   gst_object_unref (trans);