details: http://freenginx.org/hg/nginx/rev/5249bce09d1f branches: changeset: 9363:5249bce09d1f user: Maxim Dounin <mdou...@mdounin.ru> date: Thu Jun 05 02:16:42 2025 +0300 description: Disabled open_file_cache on platforms without pread().
Current open file cache code cannot properly work on platforms without pread(), since file->sys_offset is not shared across files. Further, it is not set on file initialization after ngx_open_cached_file(), leading to incorrect value 0 instead of non-zero current offset for cached file descriptors. Since platforms without pread() are rather exotic nowadays, fix is to disable open_file_cache for them. diffstat: src/http/ngx_http_core_module.c | 18 +++++++++++++----- 1 files changed, 13 insertions(+), 5 deletions(-) diffs (35 lines): diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -4981,6 +4981,8 @@ ngx_http_core_error_page(ngx_conf_t *cf, static char * ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { +#if (NGX_HAVE_PREAD || NGX_WIN32) + ngx_http_core_loc_conf_t *clcf = conf; time_t inactive; @@ -5048,11 +5050,17 @@ ngx_http_core_open_file_cache(ngx_conf_t } clcf->open_file_cache = ngx_open_file_cache_init(cf->pool, max, inactive); - if (clcf->open_file_cache) { - return NGX_CONF_OK; - } - - return NGX_CONF_ERROR; + if (clcf->open_file_cache == NULL) { + return NGX_CONF_ERROR; + } + +#else + ngx_conf_log_error(NGX_LOG_WARN, cf, 0, + "\"open_file_cache\" is not supported " + "on this platform, ignored"); +#endif + + return NGX_CONF_OK; }