fix segfault when file is deleted and open_file_cache_errors is off
diff --git a/src/core/ngx_open_file_cache.c b/src/core/ngx_open_file_cache.c
index a1692f1..baf546f 100644
--- a/src/core/ngx_open_file_cache.c
+++ b/src/core/ngx_open_file_cache.c
@@ -406,20 +406,27 @@
failed:
- if (file && file->count == 0) {
+ if (file) {
ngx_rbtree_delete(&cache->rbtree, &file->node);
cache->current--;
- if (file->fd != NGX_INVALID_FILE) {
- if (ngx_close_file(file->fd) == NGX_FILE_ERROR) {
- ngx_log_error(NGX_LOG_ALERT, pool->log, ngx_errno,
- ngx_close_file_n " \"%s\" failed", file->name);
- }
- }
+ if (file->count == 0) {
- ngx_free(file->name);
- ngx_free(file);
+ if (file->fd != NGX_INVALID_FILE) {
+ if (ngx_close_file(file->fd) == NGX_FILE_ERROR) {
+ ngx_log_error(NGX_LOG_ALERT, pool->log, ngx_errno,
+ ngx_close_file_n " \"%s\" failed",
+ file->name);
+ }
+ }
+
+ ngx_free(file->name);
+ ngx_free(file);
+
+ } else {
+ file->close = 1;
+ }
}
if (of->fd != NGX_INVALID_FILE) {