From c1db195ba5b24d58158025473a632e3fe979c0cb Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Thu, 14 Jul 2016 10:34:30 +0200 Subject: [PATCH] decodebin3: fix stream leaks MultiQueueSlot owns a ref on the active stream so it should release it when being freed. DecodebinInputStream owns ref on the active and pending stream so they should be dropped when being freed. https://bugzilla.gnome.org/show_bug.cgi?id=768811 --- gst/playback/gstdecodebin3-parse.c | 5 +++++ gst/playback/gstdecodebin3.c | 1 + 2 files changed, 6 insertions(+) diff --git a/gst/playback/gstdecodebin3-parse.c b/gst/playback/gstdecodebin3-parse.c index 0f1a17dfee..a54cf82942 100644 --- a/gst/playback/gstdecodebin3-parse.c +++ b/gst/playback/gstdecodebin3-parse.c @@ -360,6 +360,11 @@ remove_input_stream (GstDecodebin3 * dbin, DecodebinInputStream * stream) GST_DEBUG_OBJECT (dbin, "slot %p cleared", slot); } + if (stream->active_stream) + gst_object_unref (stream->active_stream); + if (stream->pending_stream) + gst_object_unref (stream->pending_stream); + dbin->input_streams = g_list_remove (dbin->input_streams, stream); g_free (stream); diff --git a/gst/playback/gstdecodebin3.c b/gst/playback/gstdecodebin3.c index 67afc4ab5b..c216590557 100644 --- a/gst/playback/gstdecodebin3.c +++ b/gst/playback/gstdecodebin3.c @@ -2312,6 +2312,7 @@ free_multiqueue_slot (GstDecodebin3 * dbin, MultiQueueSlot * slot) gst_element_release_request_pad (dbin->multiqueue, slot->sink_pad); gst_object_replace ((GstObject **) & slot->sink_pad, NULL); gst_object_replace ((GstObject **) & slot->src_pad, NULL); + gst_object_replace ((GstObject **) & slot->active_stream, NULL); g_free (slot); }