avformat/segment: Free SegmentListEntries in deinit, not write_trailer
This fixes leaks when the trailer is never written. Reviewed-by: Ridley Combs <rcombs@rcombs.me> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> (cherry picked from commit 848f96a2a6f1f60c8e0539a421d08ce8b4f24139)
This commit is contained in:
parent
2b8ad98791
commit
4c7718c1de
@ -660,6 +660,8 @@ static int select_reference_stream(AVFormatContext *s)
|
|||||||
static void seg_free(AVFormatContext *s)
|
static void seg_free(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
SegmentContext *seg = s->priv_data;
|
SegmentContext *seg = s->priv_data;
|
||||||
|
SegmentListEntry *cur;
|
||||||
|
|
||||||
ff_format_io_close(s, &seg->list_pb);
|
ff_format_io_close(s, &seg->list_pb);
|
||||||
if (seg->avf) {
|
if (seg->avf) {
|
||||||
if (seg->is_nullctx)
|
if (seg->is_nullctx)
|
||||||
@ -672,6 +674,14 @@ static void seg_free(AVFormatContext *s)
|
|||||||
av_freep(&seg->times);
|
av_freep(&seg->times);
|
||||||
av_freep(&seg->frames);
|
av_freep(&seg->frames);
|
||||||
av_freep(&seg->cur_entry.filename);
|
av_freep(&seg->cur_entry.filename);
|
||||||
|
|
||||||
|
cur = seg->segment_list_entries;
|
||||||
|
while (cur) {
|
||||||
|
SegmentListEntry *next = cur->next;
|
||||||
|
av_freep(&cur->filename);
|
||||||
|
av_free(cur);
|
||||||
|
cur = next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int seg_init(AVFormatContext *s)
|
static int seg_init(AVFormatContext *s)
|
||||||
@ -971,7 +981,6 @@ static int seg_write_trailer(struct AVFormatContext *s)
|
|||||||
{
|
{
|
||||||
SegmentContext *seg = s->priv_data;
|
SegmentContext *seg = s->priv_data;
|
||||||
AVFormatContext *oc = seg->avf;
|
AVFormatContext *oc = seg->avf;
|
||||||
SegmentListEntry *cur, *next;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!oc)
|
if (!oc)
|
||||||
@ -994,14 +1003,6 @@ fail:
|
|||||||
|
|
||||||
av_opt_free(seg);
|
av_opt_free(seg);
|
||||||
|
|
||||||
cur = seg->segment_list_entries;
|
|
||||||
while (cur) {
|
|
||||||
next = cur->next;
|
|
||||||
av_freep(&cur->filename);
|
|
||||||
av_free(cur);
|
|
||||||
cur = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
avformat_free_context(oc);
|
avformat_free_context(oc);
|
||||||
seg->avf = NULL;
|
seg->avf = NULL;
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user