Output body buffer chain "flattening" doesn't work unless proxy buffering is off

Maxim Dounin mdounin at mdounin.ru
Tue Jun 8 02:30:41 MSD 2010


On Mon, Jun 07, 2010 at 10:41:57PM +0200, Srebrenko Šehić wrote:

> On Mon, Jun 7, 2010 at 9:08 AM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> Hi,
> >> Makes sense. How does one mark them as sent? I didn't see any flags in
> >> ngx_buf_t that makes that obvious. I did try to play with b->last_buf
> >> (but that should be set to 1 only for the very last buffer in the
> >> response) and also b->last_in_chain, but that did not make any
> >> difference.
> >
> > b->pos = b->last;
> I guess that should be done after the call to
> ngx_http_next_body_filter(r, in).

It should be done on each buffer in input chain as soon as it's no 
longer needed.

> I tried that, but it did not make
> any difference. It still "hangs" for payloads larger than 32KB.
> Any hints?

Probably you did something wrong.

Note well: there are other problems in code you posted as well 
(e.g. you don't pass special buffers along filter chain).  If you 
actually try to make this code work as is - expect other problems 
as well.

Note well 2: it's good idea to spend some time digging into nginx 
source code.

Maxim Dounin

More information about the nginx-devel mailing list