ПРОЕКТЫ 


  АРХИВ 


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: Баг или фича?



В общем, все разрешилось.

Если вставить ngx_http_subrequest в ngx_http_*_body_filter,
то это также приведет к вызову ngx_http_*_body_filter ( r, NULL ),
но с помощью флага в контекте это решается.

По поводу того, как в ssi сделано ожидание ngx_http_subrequest:

Зачем это?

for ( pr = ctx->wait->parent; pr; pr = pr->parent )
{
     if ( pr == r )
     {
        rc = ngx_http_next_body_filter ( r, NULL );

        if ( ctx->wait->done ) ctx->wait = NULL;

        if ( rc == NGX_ERROR || rc == NGX_AGAIN )
           return rc;
     }
}

Я так понимаю, это нужно для ожидания нескольких ngx_http_subrequest?

----- Original Message ----- From: "Igor Sysoev" <is@xxxxxxxxxxxxx>
To: <nginx-ru@xxxxxxxxx>
Sent: Monday, July 09, 2007 2:28 PM
Subject: Re: Fw: Баг или фича?


On Mon, Jul 09, 2007 at 01:53:18PM +0400, Denis Erygin wrote:

>Это фильтр или модуль ? Если модуль - как завершается ?
Это фильтр.

>Нужно смотреть на rc == NGX_AGAIN.

NGX_AGAIN вижу, но как правильно отличить в ngx_http_*_body_filter
режим докачки от ее завершения, ngx_chain_t* in == NULL
при NGX_AGAIN ?

Каждая часть ответа проходит через фильтр только один раз.
Завершение ответа - buf->last_buf. После этого in == NULL используется
для прокачки частей ответа, застрявших на разных уровнях фильтров.
Как правило, части застревают на уровне write filter.

rc в общем случае нужно транслировать на верхний уровень..


--
Игорь Сысоев
http://sysoev.ru




 




Copyright © Lexa Software, 1996-2009.