[FFmpeg-devel,v1,2/2] libavformat/file: initilize the fd to -1 instead of 0(valid fd) in case unexpected file close

Submitted by lance.lmwang@gmail.com on July 11, 2019, 4:29 a.m.

Details

Message ID 20190711042933.GA32155@izj6c97garwn1o4y2zidq0z.localdomain
State New
Headers show

Commit Message

lance.lmwang@gmail.com July 11, 2019, 4:29 a.m.
On Thu, Jul 11, 2019 at 11:16:49AM +0800, mypopy@gmail.com wrote:
> On Wed, Jul 10, 2019 at 11:11 PM Limin Wang <lance.lmwang@gmail.com> wrote:
> >
> >
> > ping?  I have developed code to use avio_open_dir function, after using avio_close_dir
> > to release the resource, my ffmepg command will lost interact for the fd
> > 0 is closed by avio_close_dir.
> >
> >
> > On Tue, Jun 18, 2019 at 06:45:13PM +0800, lance.lmwang@gmail.com wrote:
> > > From: Limin Wang <lance.lmwang@gmail.com>
> > >
> > > Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> > > ---
> > >  libavformat/file.c | 1 +
> > >  1 file changed, 1 insertion(+)
> > >
> > > diff --git a/libavformat/file.c b/libavformat/file.c
> > > index 08c7f8e6dd.. 40ae9ad2a8 100644
> > > --- a/libavformat/file.c
> > > +++ b/libavformat/file.c
> > > @@ -274,6 +274,7 @@ static int file_open_dir(URLContext *h)
> > >  #if HAVE_LSTAT
> > >      FileContext *c = h->priv_data;
> > >
> > > +    c->fd = -1;
> I don't konw why need to change the fd , suppose we have a calling
> sequence like file_open ahead of file_open_dir, can we leak a fd
> resource ?

How to reproduce the issue:
1. add one debug message like below:

2. build the examples with make examples
3. run below example tool:
./doc/examples/avio_dir_cmd list ./doc/examples

<FILE>           78056                  transcoding.o    501(20) 644
1562818479000000 1562818949000000 1562818479000000
<FILE>        18744308                         muxing    501(20) 755
1562818948000000 1562818948000000 1562818948000000
[file @ 0x7f8e50406700] fd: 0

You can see valid fd 0 is closed unexpected, if you run in ffmpeg with
avio_dir_close option, you'll lose interaction cli control for the
close.
 


> > >      c->dir = opendir(h->filename);
> > >      if (!c->dir)
> > >          return AVERROR(errno);
> > > --
> > > 2.21.0
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

Patch hide | download patch | download mbox

diff --git a/libavformat/file.c b/libavformat/file.c
index 08c7f8e6dd..f06f1aa506 100644
--- a/libavformat/file.c
+++ b/libavformat/file.c
@@ -266,6 +266,8 @@  static int64_t file_seek(URLContext *h, int64_t pos,
int whence)
 static int file_close(URLContext *h)
 {
     FileContext *c = h->priv_data;
+
+    av_log(h, AV_LOG_INFO, "fd: %d\n", c->fd);
     return close(c->fd);
 }