From 01ca62e593dc9f9b027ddd3235b8d922ea04a652 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Wed, 1 Nov 2017 11:18:12 +0100 Subject: oggdemux: Fix chain leak in push mode In some corner cases we end up with the building chain not being properly tracked (and therefore not properly freed). Add a FIXME so it can later be fixed, but for now just fix the leak --- ext/ogg/gstoggdemux.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 5307521fb..084d5d5f0 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -4966,11 +4966,23 @@ gst_ogg_demux_clear_chains (GstOggDemux * ogg) for (i = 0; i < ogg->chains->len; i++) { GstOggChain *chain = g_array_index (ogg->chains, GstOggChain *, i); + if (chain == ogg->current_chain) + ogg->current_chain = NULL; + if (chain == ogg->building_chain) + ogg->building_chain = NULL; gst_ogg_chain_free (chain); } ogg->chains = g_array_set_size (ogg->chains, 0); - ogg->current_chain = NULL; - ogg->building_chain = NULL; + if (ogg->current_chain != NULL) { + GST_FIXME_OBJECT (ogg, "current chain was tracked in existing chains !"); + gst_ogg_chain_free (ogg->current_chain); + ogg->current_chain = NULL; + } + if (ogg->building_chain != NULL) { + GST_FIXME_OBJECT (ogg, "building chain was tracked in existing chains !"); + gst_ogg_chain_free (ogg->building_chain); + ogg->building_chain = NULL; + } GST_CHAIN_UNLOCK (ogg); } -- cgit v1.2.1