Opened 8 years ago

Closed 4 years ago

#2937 closed defect (invalid)

avformat_new_stream() memory leak

Reported by: Jose Santiago Owned by:
Priority: normal Component: avformat
Version: git-master Keywords: leak
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

avformat_new_stream() calls avcodec_alloc_context3() which can allocate data that is not free'd by the manual freeing of the codec context done by ff_free_stream() which is called by avformat_free_context(). In particular the st->codec->priv_data is allocated, but not free'd. The attached patch modifies ff_free_stream() to call avcodec_close() to properly close the codec context allocated in avformat_new_stream() .

For instance in the following code:

AVFormatContext * formatCtx;
AVCodec * codec;
AVStream * avStream;
AVOutputFormat * outputFormat;
const char * shortName = "mpegts";
const char * outputURL = "file://somefile.ts";

outputFormat = av_guess_format(shortName, outputURL, NULL);
assert(outputFormat != NULL);
avformat_alloc_output_context2(&formatCtx, outputFormat, shortName, outputURL);
assert(formatCtx != NULL);
avio_open2(&formatCtx->pb, outputURL, AVIO_FLAG_WRITE, NULL, NULL);
codec = avcodec_find_decoder(AV_CODEC_ID_H264);
assert(codec != NULL);
avStream = avformat_new_stream(formatCtx, codec);
assert(avStream != NULL);
avformat_write_header(formatCtx, NULL);
av_write_trailer(formatCtx);
avio_close(formatCtx->pb);
formatCtx->pb = NULL;
# Not all of the st[]->codec is free'd here.
avformat_free_context(formatCtx);


Attachments (1)

ffmpeg-muxer-memory-leak.patch (673 bytes ) - added by Jose Santiago 8 years ago.
Patch to fix the muxer memory leak.

Download all attachments as: .zip

Change History (8)

by Jose Santiago, 8 years ago

Patch to fix the muxer memory leak.

comment:1 by Carl Eugen Hoyos, 8 years ago

Keywords: memory removed
Priority: importantnormal

Please send patches to the ffmpeg-devel mailing list where they will be reviewed.
(If you believe that this is not clearly explained on the New Ticket page, please tell us!)

comment:2 by Jose Santiago, 8 years ago

OK. I sent the patch and the description to the ffmpeg-devel list.

Your mail to 'ffmpeg-devel' with the subject

    avformat_new_stream memory leak

Is being held until the list moderator can review it for approval.

The reason it is being held:

    Post by non-member to a members-only list

Either the message will get posted to the list, or you will receive
notification of the moderator's decision.  If you would like to cancel
this posting, please visit the following URL:

    http://ffmpeg.org/mailman/confirm/ffmpeg-devel/da26e20d09b6e38059c4f81267ee9bd0fa04fb4e
Last edited 8 years ago by Jose Santiago (previous) (diff)

comment:4 by Jose Santiago, 6 years ago

This issue is resolved and can be closed as fixed.

comment:5 by Carl Eugen Hoyos, 5 years ago

Resolution: invalid
Status: newclosed

comment:6 by Tom Seddon, 4 years ago

Resolution: invalid
Status: closedreopened

I think this is still a problem... maybe? I'm not very familiar with FFmpeg.

I posted a SO question about it. It's probably best viewed on SO, because there's external links in it and stuff - http://stackoverflow.com/questions/43389411/ - and overall it doesn't add much except for detail to the original report.

Is this a bug, or not?

If it's not a bug, how does one use the API in such a way that the problem doesn't arise?

Thanks,

--Tom

comment:7 by Carl Eugen Hoyos, 4 years ago

Resolution: invalid
Status: reopenedclosed

Please consider posting your question on the libav-user mailing list.
In general, reopening months-old tickets is rarely useful.

Note: See TracTickets for help on using tickets.