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,