baseparse: arrange for consistent event handling
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 11 Jan 2011 11:05:13 +0000 (12:05 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Fri, 8 Apr 2011 14:44:55 +0000 (15:44 +0100)
gst/audioparsers/gstbaseparse.c

index ac9d7f2e1404da74f372f03cbb6eadc8495e3a0c..887bb8bb9ffcb4ba91a7ebf78312a2d61d5ba1d1 100644 (file)
@@ -985,8 +985,6 @@ gst_base_parse_src_event (GstPad * pad, GstEvent * event)
 
   if (!handled)
     ret = gst_pad_event_default (pad, event);
-  else
-    gst_event_unref (event);
 
   gst_object_unref (parse);
   return ret;
@@ -3273,11 +3271,12 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
    * it fails upstream */
   if (format != GST_FORMAT_TIME) {
     /* default action delegates to upstream */
-    return FALSE;
+    res = FALSE;
+    goto done;
   } else {
     gst_event_ref (event);
-    if (gst_pad_push_event (parse->sinkpad, event)) {
-      return TRUE;
+    if ((res = gst_pad_push_event (parse->sinkpad, event))) {
+      goto done;
     }
   }
 
@@ -3439,6 +3438,9 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
         (GstTaskFunction) gst_base_parse_loop, parse->sinkpad);
 
     GST_PAD_STREAM_UNLOCK (parse->sinkpad);
+
+    /* handled seek */
+    res = TRUE;
   } else {
     GstEvent *new_event;
     GstBaseParseSeek *seek;
@@ -3479,6 +3481,9 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
   }
 
 done:
+  /* handled event is ours to free */
+  if (res)
+    gst_event_unref (event);
   return res;
 
   /* ERRORS */