[FFmpeg-devel] Memory leak using bitstream filters with shared libs

Måns Rullgård mans
Sun Mar 9 01:05:33 CET 2008


Baptiste discovered a rather nasty memory leak when using a bitstream
filter with shared libraries.

In ffmpeg.c:write_frame() the output of bitstream filters is stored in
an AVPacket, and its destruct function is set like this (line 417):

            new_pkt.destruct= av_destruct_packet;

Later on, in av_interleave_packet_per_dts(), AVPacket.destruct is
compared against av_destruct_packet, like this (utils.c:2439):

        if(pkt->destruct == av_destruct_packet)

The trouble here is that with shared libraries, the address of
av_destruct_packet when used in the main executable or libs other than
the one defining it resolves to a trampoline that calls the real
function using a GOT entry.  As a result, this comparison is always
false when the destruct pointer was assigned outside libavformat.

Does anyone have an idea for fixing this?

-- 
M?ns Rullg?rd
mans at mansr.com




More information about the ffmpeg-devel mailing list