Mercurial > hg > nginx
comparison src/core/ngx_open_file_cache.c @ 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 | b52cb9bf2064 |
comparison
equal
deleted
inserted
replaced
1987:0e628cf11c29 | 1988:34051c712e41 |
---|---|
404 | 404 |
405 return NGX_ERROR; | 405 return NGX_ERROR; |
406 | 406 |
407 failed: | 407 failed: |
408 | 408 |
409 if (file && file->count == 0) { | 409 if (file) { |
410 ngx_rbtree_delete(&cache->rbtree, &file->node); | 410 ngx_rbtree_delete(&cache->rbtree, &file->node); |
411 | 411 |
412 cache->current--; | 412 cache->current--; |
413 | 413 |
414 if (file->fd != NGX_INVALID_FILE) { | 414 if (file->count == 0) { |
415 if (ngx_close_file(file->fd) == NGX_FILE_ERROR) { | 415 |
416 ngx_log_error(NGX_LOG_ALERT, pool->log, ngx_errno, | 416 if (file->fd != NGX_INVALID_FILE) { |
417 ngx_close_file_n " \"%s\" failed", file->name); | 417 if (ngx_close_file(file->fd) == NGX_FILE_ERROR) { |
418 } | 418 ngx_log_error(NGX_LOG_ALERT, pool->log, ngx_errno, |
419 } | 419 ngx_close_file_n " \"%s\" failed", |
420 | 420 file->name); |
421 ngx_free(file->name); | 421 } |
422 ngx_free(file); | 422 } |
423 | |
424 ngx_free(file->name); | |
425 ngx_free(file); | |
426 | |
427 } else { | |
428 file->close = 1; | |
429 } | |
423 } | 430 } |
424 | 431 |
425 if (of->fd != NGX_INVALID_FILE) { | 432 if (of->fd != NGX_INVALID_FILE) { |
426 if (ngx_close_file(of->fd) == NGX_FILE_ERROR) { | 433 if (ngx_close_file(of->fd) == NGX_FILE_ERROR) { |
427 ngx_log_error(NGX_LOG_ALERT, pool->log, ngx_errno, | 434 ngx_log_error(NGX_LOG_ALERT, pool->log, ngx_errno, |