Mercurial > hg > nginx
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) {