From: Edward Hervey Date: Wed, 1 Nov 2017 10:18:12 +0000 (+0100) Subject: oggdemux: Fix chain leak in push mode X-Git-Tag: 1.16.2~1043 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eb8bf0f162d924acce6bb7593b51a7d508645bb5;p=platform%2Fupstream%2Fgst-plugins-base.git 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 --- diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 075f0dc..be44cf5 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -4988,11 +4988,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); }