Dealing with buffered data with upstream generated response

Sirsiwal, Umesh usirsiwal at verivue.com
Tue Nov 29 13:06:07 UTC 2011


Any help on this will be greatly appreciated. 

Thank you!

-Umesh

________________________________________

I am developing a body filter which transforms outgoing stream. As part
of the function, the incoming stream is copied in new buffer and sent.
This in some cases results in a condition where my filter has busy
buffers but the upper layers don't have any busy buffer. In our case the
data is generated by upstream module. Since upstream module does not pay
attention to connection->buffered, the output_filter is never called
again to flush my busy buffers and the transfer just hangs.

Adding r->connection->buffered to the or condition solves the hang.

            if (u->out_bufs || u->busy_bufs) {
                 rc = ngx_http_output_filter(r, u->out_bufs);

                 if (rc == NGX_ERROR) {
                     ngx_http_upstream_finalize_request(r, u, 0);
                     return;
                 }

                 ngx_chain_update_chains(&u->free_bufs, &u->busy_bufs,
&u->out_bufs, u->output.tag);
             }

Is this nginx bug or am I missing something?

-Umesh



More information about the nginx mailing list