From 34cf1a1bbc69724148eea52cfe0a6f2464fd09bc Mon Sep 17 00:00:00 2001 From: Alessandro Decina Date: Fri, 13 Apr 2012 00:14:27 +0200 Subject: [PATCH] mpegtsmux: don't leak force key unit events --- gst/mpegtsmux/mpegtsmux.c | 13 +++++++++++-- tests/check/elements/mpegtsmux.c | 11 +++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c index c243f1af2a..93aacb227b 100644 --- a/gst/mpegtsmux/mpegtsmux.c +++ b/gst/mpegtsmux/mpegtsmux.c @@ -292,6 +292,7 @@ mpegtsmux_dispose (GObject * object) g_list_free (mux->streamheader); mux->streamheader = NULL; } + gst_event_replace (&mux->force_key_unit_event, NULL); GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object)); } @@ -714,6 +715,8 @@ mpegtsmux_sink_event (GstPad * pad, GstEvent * event) out: if (forward) res = ts_data->eventfunc (pad, event); + else + gst_event_unref (event); gst_object_unref (mux); return res; @@ -723,7 +726,7 @@ static gboolean mpegtsmux_src_event (GstPad * pad, GstEvent * event) { MpegTsMux *mux = GST_MPEG_TSMUX (gst_pad_get_parent (pad)); - gboolean res = TRUE; + gboolean res = TRUE, forward = TRUE; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CUSTOM_UPSTREAM: @@ -738,6 +741,8 @@ mpegtsmux_src_event (GstPad * pad, GstEvent * event) if (!gst_video_event_is_force_key_unit (event)) break; + forward = FALSE; + gst_video_event_parse_upstream_force_key_unit (event, &running_time, &all_headers, &count); @@ -783,10 +788,14 @@ mpegtsmux_src_event (GstPad * pad, GstEvent * event) break; } default: - res = gst_pad_event_default (pad, event); break; } + if (forward) + res = gst_pad_event_default (pad, event); + else + gst_event_unref (event); + gst_object_unref (mux); return res; } diff --git a/tests/check/elements/mpegtsmux.c b/tests/check/elements/mpegtsmux.c index a95cee1ad1..c7de27d1e8 100644 --- a/tests/check/elements/mpegtsmux.c +++ b/tests/check/elements/mpegtsmux.c @@ -42,8 +42,6 @@ static GstStaticPadTemplate audio_src_template = GST_STATIC_PAD_TEMPLATE ("src", typedef struct _TestData { GstEvent *sink_event; - GstEvent *src_event1; - GstEvent *src_event2; gint src_events; } TestData; @@ -60,14 +58,10 @@ src_event (GstPad * pad, GstObject * parent, GstEvent * event) { TestData *data = (TestData *) gst_pad_get_element_private (pad); - if (event->type == GST_EVENT_CUSTOM_UPSTREAM) { + if (event->type == GST_EVENT_CUSTOM_UPSTREAM) data->src_events += 1; - if (data->src_event1 != NULL) - data->src_event2 = event; - else - data->src_event1 = event; - } + gst_event_unref (event); return TRUE; } @@ -79,6 +73,7 @@ sink_event (GstPad * pad, GstObject * parent, GstEvent * event) if (event->type == GST_EVENT_CUSTOM_DOWNSTREAM) data->sink_event = event; + gst_event_unref (event); return TRUE; }