[PATCH] Upstream: avoid closing client conn when no response body needed

Maxim Dounin mdounin at mdounin.ru
Wed Mar 9 15:22:43 UTC 2016


Hello!

On Tue, Mar 08, 2016 at 10:25:54PM -0500, Justin Li wrote:

> Thanks for your quick response again.
> 
> On Tue, Mar 8, 2016 at 10:04 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> 
> > If p->downstream_error is set from the very start there is no
> > harm, as there are no busy buffers.  And the same is true if
> > there is a real error and we don't need to send anything - these
> > buffers won't be used, so they can be drained (other code have to
> > be careful to don't trigger false alerts though).
> >
> > The problem with your previous patch is that you've tried to drain
> > buffers in the p->downstream_done case, when p->busy buffers are
> > important and can contain real data (already passed to output
> > filters though not yet sent to the client).
> 
> In the original patch, downstream_done was being set at the same point
> downstream_error was previously set, inside the first header_only check of
> ngx_http_upstream_send_response. Is the reason for your original comment
> about busy buffer corruption because this flag is set in another place as
> well?

Yes.

> If not, then I still don't understand why the original patch would
> cause issues. If so, then it seems like the cleanest solution is to
> introduce another flag (perhaps downstream_drain) that can be used in this
> case.

I don't see reasons why we need another flag (or the flag at all) 
to handle this case.  Just finalizing the request as in your last 
patch will handle things correctly.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx-devel mailing list