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

Michael Niedermayer michaelni
Wed Apr 2 13:37:58 CEST 2008


On Wed, Apr 02, 2008 at 10:50:20AM +0200, Baptiste Coudurier wrote:
> Hi guys,
> 
> M?ns Rullg?rd wrote:
> > 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?
> > 
> 
> Sorry, but could we try to find an acceptable solution for this issue ?

as said elsewhere in this thread:
 static inline void av_free_packet(AVPacket *pkt)
 {
-    if (pkt && pkt->destruct) {
-        pkt->destruct(pkt);
+    if(pkt){
+        if(pkt->destruct)
+            pkt->destruct(pkt);
+        pkt->data = NULL; pkt->size = 0;
     }
 }
----
 void av_destruct_packet(AVPacket *pkt)
 {
     av_free(pkt->data);
-    pkt->data = NULL; pkt->size = 0;
 }
----
-void av_destruct_packet_nofree(AVPacket *pkt)
-{
-    pkt->data = NULL; pkt->size = 0;
-}

and use NULL instead of av_destruct_packet_nofree
-----------------
... I dont use libav shared libs ... full patch welcome.

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

When you are offended at any man's fault, turn to yourself and study your
own failings. Then you will forget your anger. -- Epictetus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080402/6521d910/attachment.pgp>



More information about the ffmpeg-devel mailing list