[PATCH] Move calculation $upstream_response_time before send header to client.

catap+nginx at catap.ru catap+nginx at catap.ru
Tue Apr 21 21:59:21 MSD 2009


From: Kirill A. Korinskiy <catap at catap.ru>

Now calculation $upstream_response_time happen after send header to
client and we have a 0 ms response to not error (last) upstream.
---
 src/http/ngx_http_upstream.c |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 7ae15cb..0771388 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -1843,10 +1843,21 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
     int                        tcp_nodelay;
     ssize_t                    n;
     ngx_int_t                  rc;
+    ngx_time_t                *tp;
     ngx_event_pipe_t          *p;
     ngx_connection_t          *c;
     ngx_http_core_loc_conf_t  *clcf;
 
+    if (u->state && u->state->response_sec) {
+        tp = ngx_timeofday();
+        u->state->response_sec = tp->sec - u->state->response_sec;
+        u->state->response_msec = tp->msec - u->state->response_msec;
+
+        if (u->pipe) {
+            u->state->response_length = u->pipe->read_length;
+        }
+    }
+
     rc = ngx_http_send_header(r);
 
     if (rc == NGX_ERROR || rc > NGX_OK || r->post_action) {
@@ -2735,8 +2746,6 @@ static void
 ngx_http_upstream_finalize_request(ngx_http_request_t *r,
     ngx_http_upstream_t *u, ngx_int_t rc)
 {
-    ngx_time_t  *tp;
-
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                    "finalize http upstream request: %i", rc);
 
@@ -2744,16 +2753,6 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
         *u->cleanup = NULL;
     }
 
-    if (u->state && u->state->response_sec) {
-        tp = ngx_timeofday();
-        u->state->response_sec = tp->sec - u->state->response_sec;
-        u->state->response_msec = tp->msec - u->state->response_msec;
-
-        if (u->pipe) {
-            u->state->response_length = u->pipe->read_length;
-        }
-    }
-
     u->finalize_request(r, rc);
 
     if (u->peer.free) {
-- 
1.6.2






More information about the nginx mailing list