[Libav-user] RTMP Play file descriptor leak

Alexander Drozdov adrozdoff at gmail.com
Wed Sep 10 03:37:19 CEST 2014


In our project we uses FFmpeg to demux RTMP streams. Input stream takes
from Wowza/nginx-rtmp. Our application is a daemon that try to connect to
source periodicaly if it does not present (does not published to Wowza, for
example). We also use interrupt callback to break connection if timeout is
occured. So in this situation:
- Alive server
- Alive streaming application
- Configured inerrupt callback with timeout
- Disalive stream

TCP socket to server does not closes.

I look into code with debugger and found place where error is occured:
rtmpproto.c, rtmp_open() L:2672

Root couse: return from function without resources clean up

Solution: replace return with 'goto fail'

Path is attached.

WBR, Alexander Drozdov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20140910/bb42f18b/attachment.html>
-------------- next part --------------
--- old/libavformat/rtmpproto.c	2014-09-09 17:53:51.689708377 +1100
+++ orig/libavformat/rtmpproto.c	2014-09-09 17:54:05.833530565 +1100
@@ -2670,7 +2670,7 @@
         // audio or video packet arrives.
         while (!rt->has_audio && !rt->has_video && !rt->received_metadata) {
             if ((ret = get_packet(s, 0)) < 0)
-               return ret;
+               goto fail;
         // Either after we have read the metadata or (if there is none) the

More information about the Libav-user mailing list