Mercurial > hg > nginx
diff src/http/modules/ngx_http_log_module.c @ 633:f971949ffb58 release-0.3.38
nginx-0.3.38-RELEASE import
*) Feature: the ngx_http_dav_module.
*) Change: the ngx_http_perl_module optimizations.
Thanks to Sergey Skvortsov.
*) Feature: the ngx_http_perl_module supports the $r->request_body_file
method.
*) Feature: the "client_body_in_file_only" directive.
*) Workaround: now on disk overflow nginx tries to write access logs
once a second only.
Thanks to Anton Yuzhaninov and Maxim Dounin.
*) Bugfix: now the "limit_rate" directive more precisely limits rate if
rate is more than 100 Kbyte/s.
Thanks to ForJest.
*) Bugfix: now the IMAP/POP3 proxy escapes the "\r" and "\n" symbols in
login and password to pass authorization server.
Thanks to Maxim Dounin.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 14 Apr 2006 09:53:38 +0000 |
parents | 326634fb9d47 |
children | 4946078f0a79 |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_log_module.c +++ b/src/http/modules/ngx_http_log_module.c @@ -23,6 +23,7 @@ typedef struct { typedef struct { ngx_open_file_t *file; + time_t disk_full_time; ngx_array_t *ops; /* array of ngx_http_log_op_t */ } ngx_http_log_t; @@ -253,6 +254,17 @@ ngx_http_log_handler(ngx_http_request_t log = lcf->logs->elts; for (l = 0; l < lcf->logs->nelts; l++) { + if (ngx_time() == log[l].disk_full_time) { + + /* + * On FreeBSD writing to a full filesystem with enabled softupdates + * may block process for much longer time than writing to non-full + * filesystem, so we skip writing the log for one second. + */ + + continue; + } + len = 0; op = log[l].ops->elts; for (i = 0; i < log[l].ops->nelts; i++) { @@ -272,7 +284,13 @@ ngx_http_log_handler(ngx_http_request_t if (len > (size_t) (file->last - file->pos)) { - ngx_write_fd(file->fd, file->buffer, file->pos - file->buffer); + if (ngx_write_fd(file->fd, file->buffer, + file->pos - file->buffer) + == -1 + && ngx_errno == NGX_ENOSPC) + { + log[l].disk_full_time = ngx_time(); + } file->pos = file->buffer; } @@ -306,7 +324,11 @@ ngx_http_log_handler(ngx_http_request_t ngx_linefeed(p); - ngx_write_fd(file->fd, line, p - line); + if (ngx_write_fd(file->fd, line, p - line) == -1 + && ngx_errno == NGX_ENOSPC) + { + log[l].disk_full_time = ngx_time(); + } } return NGX_OK; @@ -1017,6 +1039,8 @@ ngx_http_log_set_log(ngx_conf_t *cf, ngx return NGX_CONF_ERROR; } + log->disk_full_time = 0; + if (cf->args->nelts >= 3) { name = value[2];