diff options
author | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2011-04-09 01:32:37 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2011-04-19 19:48:07 +0200 |
commit | 55815edca038997ec283569a192a3eca7f2143bc (patch) | |
tree | 6c3910611d7f68cd049c4b66a57c525d0de86aee | |
parent | 59d96941f0285a501989d5f2c9b69be0a1393ed5 (diff) | |
download | ffmpeg-55815edca038997ec283569a192a3eca7f2143bc.tar.gz |
prefer avio_check() over url_exist()
The problem with url_exist() is that it tries to open a resource in
RDONLY mode. If the file is a FIFO and there is already a reading
client, the open() call will hang.
By using avio_check() with access mode of 0, the second reading
process will check if the file exists without attempting to open it,
thus avoiding the lock.
Fix issue #1663.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r-- | ffmpeg.c | 2 | ||||
-rw-r--r-- | ffserver.c | 4 | ||||
-rw-r--r-- | libavformat/img2.c | 6 |
3 files changed, 6 insertions, 6 deletions
@@ -3733,7 +3733,7 @@ static void opt_output_file(const char *filename) (strchr(filename, ':') == NULL || filename[1] == ':' || av_strstart(filename, "file:", NULL))) { - if (url_exist(filename)) { + if (avio_check(filename, 0) == 0) { if (!using_stdin) { fprintf(stderr,"File '%s' already exists. Overwrite ? [y/N] ", filename); fflush(stderr); diff --git a/ffserver.c b/ffserver.c index 5defd40847..d341182a4f 100644 --- a/ffserver.c +++ b/ffserver.c @@ -3679,7 +3679,7 @@ static void build_feed_streams(void) for(feed = first_feed; feed != NULL; feed = feed->next_feed) { int fd; - if (url_exist(feed->feed_filename)) { + if (avio_check(feed->feed_filename, AVIO_FLAG_READ) > 0) { /* See if it matches */ AVFormatContext *s; int matches = 0; @@ -3752,7 +3752,7 @@ static void build_feed_streams(void) unlink(feed->feed_filename); } } - if (!url_exist(feed->feed_filename)) { + if (avio_check(feed->feed_filename, AVIO_FLAG_WRITE) <= 0) { AVFormatContext s1 = {0}, *s = &s1; if (feed->readonly) { diff --git a/libavformat/img2.c b/libavformat/img2.c index 84d841f0ed..1d50fbf567 100644 --- a/libavformat/img2.c +++ b/libavformat/img2.c @@ -131,11 +131,11 @@ static int find_image_range(int *pfirst_index, int *plast_index, if (av_get_frame_filename(buf, sizeof(buf), path, first_index) < 0){ *pfirst_index = *plast_index = 1; - if(url_exist(buf)) + if (avio_check(buf, AVIO_FLAG_READ) > 0) return 0; return -1; } - if (url_exist(buf)) + if (avio_check(buf, AVIO_FLAG_READ) > 0) break; } if (first_index == 5) @@ -153,7 +153,7 @@ static int find_image_range(int *pfirst_index, int *plast_index, if (av_get_frame_filename(buf, sizeof(buf), path, last_index + range1) < 0) goto fail; - if (!url_exist(buf)) + if (avio_check(buf, AVIO_FLAG_READ) <= 0) break; range = range1; /* just in case... */ |