From c626ccec1280b3f65ae14699afb51d62bd16ed99 Mon Sep 17 00:00:00 2001 From: Kevin Reeves Date: Thu, 21 Nov 2019 12:48:42 -0600 Subject: [PATCH] main/file.c: Limit media cache usage to remote files. When testing for the existance of a file, the media cache is searched even if the file has no chance of being in it. This can cause performance issues as the media cache size increases. As a result, calls to applications like Read and Playback using local files must scan through the media cache before playing. Under load and with a large cache, this can delay the playback of those files. This patch updates the function that checks for the existance of a file to only consult the media cache database if the requested file is a remote path. It introduces a new is_remote_path() function in main/file.c. ASTERISK-28625 #close Reported-by: kevin@phoneburner.com Change-Id: If91137493732d9034dafa381c081c69274a7dcc9 --- main/file.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/main/file.c b/main/file.c index 9896c7e0e0..a0616c8d02 100644 --- a/main/file.c +++ b/main/file.c @@ -640,6 +640,11 @@ static int is_absolute_path(const char *filename) return filename[0] == '/'; } +static int is_remote_path(const char *filename) +{ + return strstr(filename, "://") ? 1 : 0; +} + /*! * \brief test if a file exists for a given format. * \note result_cap is OPTIONAL @@ -653,7 +658,7 @@ static int fileexists_test(const char *filename, const char *fmt, const char *la return 0; } - if (!ast_media_cache_retrieve(filename, NULL, buf, buflen)) { + if (is_remote_path(filename) && !ast_media_cache_retrieve(filename, NULL, buf, buflen)) { return filehelper(buf, result_cap, NULL, ACTION_EXISTS); }