Upstream: fixed "zero size buf" alerts with cache (ticket #918).

If caching was used, "zero size buf in output" alerts might appear
in logs if a client prematurely closed connection.  Alerts appeared
in the following situation:

- writing to client returned an error, so event pipe
  drained all busy buffers leaving body output filters
  in an invalid state;

- when upstream response was fully received,
  ngx_http_upstream_finalize_request() tried to flush
  all pending data.

Fix is to avoid flushing body if p->downstream_error is set.
This commit is contained in:
Maxim Dounin 2016-03-10 21:58:03 +03:00
parent cf48794407
commit 2aa6d7fd65

View File

@ -4068,7 +4068,8 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
if (!u->header_sent
|| rc == NGX_HTTP_REQUEST_TIME_OUT
|| rc == NGX_HTTP_CLIENT_CLOSED_REQUEST)
|| rc == NGX_HTTP_CLIENT_CLOSED_REQUEST
|| (u->pipe && u->pipe->downstream_error))
{
ngx_http_finalize_request(r, rc);
return;