]> git.kaiwu.me - nginx.git/commitdiff
Upstream: fixed "zero size buf" alerts with cache (ticket #918).
authorMaxim Dounin <mdounin@mdounin.ru>
Thu, 10 Mar 2016 18:58:03 +0000 (21:58 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Thu, 10 Mar 2016 18:58:03 +0000 (21:58 +0300)
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.

src/http/ngx_http_upstream.c

index dbaa9563d76c847ffb8c5bd54d434c1a0e487c8a..08fa95a9388478a350923feeee2982f046aff107 100644 (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;