]> git.kaiwu.me - nginx.git/commitdiff
fix segfault when file is deleted and open_file_cache_errors is off
authorIgor Sysoev <igor@sysoev.ru>
Tue, 29 Apr 2008 18:15:23 +0000 (18:15 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Tue, 29 Apr 2008 18:15:23 +0000 (18:15 +0000)
src/core/ngx_open_file_cache.c

index a1692f1011a49a893d6468bf2fa8f07c32f286cd..baf546f074aebe3cd079dede6a072dc819f26b6f 100644 (file)
@@ -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) {
 
-        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) {