[nginx] Access log: fixed the "if=" parameter with buffering (ti...

Valentin Bartenev vbart at nginx.com
Sat Sep 13 17:52:14 UTC 2014


details:   http://hg.nginx.org/nginx/rev/e3016ee8dba3
branches:  
changeset: 5833:e3016ee8dba3
user:      Valentin Bartenev <vbart at nginx.com>
date:      Sat Sep 13 21:47:13 2014 +0400
description:
Access log: fixed the "if=" parameter with buffering (ticket #625).

It might not work if there were more than one "access_log" directives
pointed to the same file and duplicate buffer parameters.

diffstat:

 src/http/modules/ngx_http_log_module.c |  41 ++++++++++++++++-----------------
 1 files changed, 20 insertions(+), 21 deletions(-)

diffs (72 lines):

diff -r d09b689911ac -r e3016ee8dba3 src/http/modules/ngx_http_log_module.c
--- a/src/http/modules/ngx_http_log_module.c	Fri Sep 12 18:50:47 2014 +0400
+++ b/src/http/modules/ngx_http_log_module.c	Sat Sep 13 21:47:13 2014 +0400
@@ -1136,7 +1136,7 @@ ngx_http_log_set_log(ngx_conf_t *cf, ngx
     ngx_int_t                          gzip;
     ngx_uint_t                         i, n;
     ngx_msec_t                         flush;
-    ngx_str_t                         *value, name, s, filter;
+    ngx_str_t                         *value, name, s;
     ngx_http_log_t                    *log;
     ngx_syslog_peer_t                 *peer;
     ngx_http_log_buf_t                *buffer;
@@ -1257,7 +1257,6 @@ process_formats:
     size = 0;
     flush = 0;
     gzip = 0;
-    filter.len = 0;
 
     for (i = 3; i < cf->args->nelts; i++) {
 
@@ -1325,8 +1324,25 @@ process_formats:
         }
 
         if (ngx_strncmp(value[i].data, "if=", 3) == 0) {
-            filter.len = value[i].len - 3;
-            filter.data = value[i].data + 3;
+            s.len = value[i].len - 3;
+            s.data = value[i].data + 3;
+
+            ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
+
+            ccv.cf = cf;
+            ccv.value = &s;
+            ccv.complex_value = ngx_palloc(cf->pool,
+                                           sizeof(ngx_http_complex_value_t));
+            if (ccv.complex_value == NULL) {
+                return NGX_CONF_ERROR;
+            }
+
+            if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
+                return NGX_CONF_ERROR;
+            }
+
+            log->filter = ccv.complex_value;
+
             continue;
         }
 
@@ -1405,23 +1421,6 @@ process_formats:
         log->file->data = buffer;
     }
 
-    if (filter.len) {
-        log->filter = ngx_palloc(cf->pool, sizeof(ngx_http_complex_value_t));
-        if (log->filter == NULL) {
-            return NGX_CONF_ERROR;
-        }
-
-        ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
-
-        ccv.cf = cf;
-        ccv.value = &filter;
-        ccv.complex_value = log->filter;
-
-        if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
-            return NGX_CONF_ERROR;
-        }
-    }
-
     return NGX_CONF_OK;
 }
 



More information about the nginx-devel mailing list