ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re[2]: Повторное использ ование map при изменен ии исходной переменной



At Fri, 24 Jul 2009 15:11:38 +0400,
Igor Sysoev <is@xxxxxxxxxxxxx> wrote:

> 
> flush нужен для того, чтобы в r->variables записалось новое значение.
> Поскольку set пишет сразу в r->variables, то ему flush не нужен.
> 
> flush, возможно, нужен для выражения, которое считает set.
> 

но человек ставит второй раз, после использования, переменную. Она все
еще valid и не not_found, т.е. даже если код сделает
ngx_http_script_flush_no_cacheable_variables она не перестанет быть
валидной (ибо не стоит no_cacheable) и, соответственно мы получаем что
нужно делать дублирование map.

Пока в голову приходит только сделать что-то подобное:

void
ngx_http_script_force_flush_variables(ngx_http_request_t *r,
    ngx_array_t *indices)
{
    ngx_uint_t  n, *index;

    if (indices) {
        index = indices->elts;
        for (n = 0; n < indices->nelts; n++) {
            r->variables[index[n]].valid = 0;
            r->variables[index[n]].not_found = 0;
        }
    }
}


может включишь это? Вот лично мне это сильно упростит жизнь и не надо
будет сильно извращаться.

Но да, я согласен, что это хак. Но лучше варианта я пока не придумал.

-- 
wbr, Kirill



 




Copyright © Lexa Software, 1996-2009.