фильтр
Maxim Dounin
mdounin at mdounin.ru
Sun Mar 30 05:44:53 MSD 2008
Hello!
On Sun, Mar 30, 2008 at 03:03:29AM +0200, Alexander Dolgarev wrote:
>В чем принципиальная неправильность следующего фрагмента кода (если
>допустить что in != NULL и in->next == NULL)? Клиент просто ждет и
>ничего не получает в ответ.
>
>
>static ngx_int_t
>ngx_http_*_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
>{
> ngx_chain_t *out;
> ngx_buf_t *b;
>
> out = ngx_pcalloc(r->pool, sizeof(ngx_chain_t));
> b = ngx_create_temp_buf(r->pool, in->buf->last - in->buf->pos);
> memcpy (b->pos, in->buf->pos, in->buf->last - in->buf->pos);
> b->last_buf = in->buf->last_buf;
> out->buf = b;
>
> return ngx_http_next_body_filter(r, out);
>}
Старый буфер помечен как отправленный, соответственно если ответ
будет более чем output_buffers - его не отошлют. Как минимум надо
ещё сделать:
in->buf->pos = in->buf->last;
Плюс к тому - никто не обещал, что буфер будет в памяти. Чтобы он
таки там был - об этом надо специально попросить, поставив в
ngx_http_*_header_filter()
r->filter_need_in_memory = 1;
Maxim Dounin
More information about the nginx-ru
mailing list