changeset 1988:34051c712e41

fix segfault when file is deleted and open_file_cache_errors is off
author Igor Sysoev <igor@sysoev.ru>
date Tue, 29 Apr 2008 18:15:23 +0000
parents 0e628cf11c29
children 63c60504c0bf
files src/core/ngx_open_file_cache.c
diffstat 1 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/ngx_open_file_cache.c
+++ b/src/core/ngx_open_file_cache.c
@@ -406,20 +406,27 @@ found:
 
 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) {
+
+	    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;
         }
-
-        ngx_free(file->name);
-        ngx_free(file);
     }
 
     if (of->fd != NGX_INVALID_FILE) {