On Tue, Jan 5, 2016 at 12:11 PM, Paul B Mahol <one...@gmail.com> wrote: > Signed-off-by: Paul B Mahol <one...@gmail.com> > --- > libavfilter/formats.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/libavfilter/formats.c b/libavfilter/formats.c > index a2b19e7..f12dcf4 100644 > --- a/libavfilter/formats.c > +++ b/libavfilter/formats.c > @@ -518,6 +518,8 @@ void ff_formats_changeref(AVFilterFormats **oldref, > AVFilterFormats **newref) > int ret = ref_fn(fmts, &ctx->inputs[i]->out_fmts); \ > if (ret < 0) { \ > unref_fn(&fmts); \ > + av_freep(&fmts->list); \ > + av_freep(&fmts); \ > return ret; \ > } \ > count++; \ > @@ -528,6 +530,8 @@ void ff_formats_changeref(AVFilterFormats **oldref, > AVFilterFormats **newref) > int ret = ref_fn(fmts, &ctx->outputs[i]->in_fmts); \ > if (ret < 0) { \ > unref_fn(&fmts); \ > + av_freep(&fmts->list); \ > + av_freep(&fmts); \ > return ret; \ > } \ > count++; \
This is a good effort, and I favor it. However, note that no matter what is done here (ie at the API level in avfilter/formats), it will not fix all possible error paths in the filters as far as I can tell. The reason roughly boils down to the calls being able to free their own stuff on failure, but they are not able to free other things, e.g samplerates functions can't free channel layouts. Or put in other words, if one wants to be absolutely correct, a ton of filters will need updating unfortunately. > -- > 1.9.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel