<div dir="ltr">Thanks for your quick response again.<br><br>On Tue, Mar 8, 2016 at 10:04 PM, Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br><br>> If p->downstream_error is set from the very start there is no<br>> harm, as there are no busy buffers.  And the same is true if<br>> there is a real error and we don't need to send anything - these<br>> buffers won't be used, so they can be drained (other code have to<br>> be careful to don't trigger false alerts though).<br>><br>> The problem with your previous patch is that you've tried to drain<br>> buffers in the p->downstream_done case, when p->busy buffers are<br>> important and can contain real data (already passed to output<br>> filters though not yet sent to the client).<br><br>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? 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.<br><div><br></div><div>--</div><div>Justin Li</div><div>Developer @ Shopify</div></div>