[FFmpeg-devel] [PATCH v1 2/2] libavformat/file: initilize the fd to -1 instead of 0(valid fd) in case unexpected file close
Limin Wang
lance.lmwang at gmail.com
Thu Jul 11 07:29:33 EEST 2019
On Thu, Jul 11, 2019 at 11:16:49AM +0800, mypopy at gmail.com wrote:
> On Wed, Jul 10, 2019 at 11:11 PM Limin Wang <lance.lmwang at 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 at gmail.com wrote:
> > > From: Limin Wang <lance.lmwang at gmail.com>
> > >
> > > Signed-off-by: Limin Wang <lance.lmwang at 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:
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);
}
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 at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list