]> 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 14:39:15 +0000 (14:39 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Tue, 29 Apr 2008 14:39:15 +0000 (14:39 +0000)
src/core/ngx_open_file_cache.c

index a1692f1011a49a893d6468bf2fa8f07c32f286cd..c217818f352d4dffe25aa97eab4b59902574d437 100644 (file)
@@ -173,8 +173,6 @@ ngx_open_cached_file(ngx_open_file_cache_t *cache, ngx_str_t *name,
 
         file->uses++;
 
-        ngx_queue_remove(&file->queue);
-
         if (file->fd == NGX_INVALID_FILE && file->err == 0 && !file->is_dir) {
 
             /* file was not used often enough to keep open */
@@ -185,6 +183,8 @@ ngx_open_cached_file(ngx_open_file_cache_t *cache, ngx_str_t *name,
                 goto failed;
             }
 
+            ngx_queue_remove(&file->queue);
+
             goto add_event;
         }
 
@@ -212,6 +212,8 @@ ngx_open_cached_file(ngx_open_file_cache_t *cache, ngx_str_t *name,
                 of->err = file->err;
             }
 
+            ngx_queue_remove(&file->queue);
+
             goto found;
         }
 
@@ -236,6 +238,8 @@ ngx_open_cached_file(ngx_open_file_cache_t *cache, ngx_str_t *name,
             goto failed;
         }
 
+        ngx_queue_remove(&file->queue);
+
         if (of->is_dir) {
 
             if (file->is_dir || file->err) {