From a6a982e8be06a861e23b377d8df4e3be8538ca53 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Fri, 14 Jan 2011 16:30:11 -0300 Subject: audioparsers: baseparse: Be careful to not lose the event ref Don't unref the event if it hasn't been handled, because the caller assumes it is still valid and might reuse it. I ran into this problem when transcoding an AVI (with mp3 inside) to gpp. https://bugzilla.gnome.org/show_bug.cgi?id=639555 --- gst/audioparsers/gstbaseparse.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 58c0ebe9e..59355c775 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -738,7 +738,10 @@ gst_base_parse_sink_event (GstPad * pad, GstEvent * event) * * Element-level event handler function. * - * Returns: TRUE if the event was handled and not need forwarding. + * The event will be unreffed only if it has been handled and this + * function returns %TRUE + * + * Returns: %TRUE if the event was handled and not need forwarding. */ static gboolean gst_base_parse_sink_eventfunc (GstBaseParse * parse, GstEvent * event) @@ -858,7 +861,9 @@ gst_base_parse_sink_eventfunc (GstBaseParse * parse, GstEvent * event) case GST_EVENT_FLUSH_START: parse->priv->flushing = TRUE; - handled = gst_pad_push_event (parse->srcpad, event); + handled = gst_pad_push_event (parse->srcpad, gst_event_ref (event)); + if (handled) + gst_event_unref (event); /* Wait for _chain() to exit by taking the srcpad STREAM_LOCK */ GST_PAD_STREAM_LOCK (parse->srcpad); GST_PAD_STREAM_UNLOCK (parse->srcpad); -- cgit v1.2.1