Mercurial > hg > nginx
changeset 9296:af5b47569cb2
Core: fixed ENOSPC handling for error logs.
For each connection a new ngx_log_t structure is created, and saving
anything into disk_full_time field in this structure doesn't affect
other connections. Fix is to move the disk_full_time field into the
ngx_open_file_t structure.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 25 Jun 2024 22:57:57 +0300 |
parents | c5623963c29e |
children | e1f15d47d102 |
files | src/core/ngx_conf_file.c src/core/ngx_conf_file.h src/core/ngx_log.c src/core/ngx_log.h |
diffstat | 4 files changed, 5 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/ngx_conf_file.c +++ b/src/core/ngx_conf_file.c @@ -951,6 +951,7 @@ ngx_conf_open_file(ngx_cycle_t *cycle, n file->name = *name; } + file->disk_full_time = 0; file->flush = NULL; file->data = NULL;
--- a/src/core/ngx_conf_file.h +++ b/src/core/ngx_conf_file.h @@ -90,6 +90,8 @@ struct ngx_open_file_s { ngx_fd_t fd; ngx_str_t name; + time_t disk_full_time; + void (*flush)(ngx_open_file_t *file, ngx_log_t *log); void *data; };
--- a/src/core/ngx_log.c +++ b/src/core/ngx_log.c @@ -169,7 +169,7 @@ ngx_log_error_core(ngx_uint_t level, ngx goto next; } - if (ngx_time() == log->disk_full_time) { + if (ngx_time() == log->file->disk_full_time) { /* * on FreeBSD writing to a full filesystem with enabled softupdates @@ -183,7 +183,7 @@ ngx_log_error_core(ngx_uint_t level, ngx n = ngx_write_fd(log->file->fd, errstr, p - errstr); if (n == -1 && ngx_errno == NGX_ENOSPC) { - log->disk_full_time = ngx_time(); + log->file->disk_full_time = ngx_time(); } if (log->file->fd == ngx_stderr) {