[PATCH 26 of 31] Variables: honor no_cacheable for not_found variables

Maxim Dounin mdounin at mdounin.ru
Tue Feb 15 16:33:42 MSK 2011

# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1297776703 -10800
# Node ID 2fe2f9c552aca65581268a5add6b37eba5f86e6c
# Parent  11baba299a5b7a90c70f37fbfd28ad8a8f5eab58
Variables: honor no_cacheable for not_found variables.

Variables with not_found flag set follow the same rules as ones with valid
flag set.  Make sure ngx_http_get_flushed_variable() will flush non-cacheable
variables with not_found flag set.

This fixes at least one known problem with $args not available in subrequest
(with args) when there were no args in main request and $args variable was
queried in main request (reported by Laurence Rowe aka elro on irc).

Also this eliminates unneeded call to ngx_http_get_indexed_variable() in
cacheable case (as it will return cached value anyway).

diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -427,7 +427,7 @@ ngx_http_get_flushed_variable(ngx_http_r
     v = &r->variables[index];
-    if (v->valid) {
+    if (v->valid || v->not_found) {
         if (!v->no_cacheable) {
             return v;

More information about the nginx-devel mailing list