[nginx] svn commit: r5115 - trunk/src/http

vbart at nginx.com vbart at nginx.com
Fri Mar 15 19:49:55 UTC 2013


Author: vbart
Date: 2013-03-15 19:49:54 +0000 (Fri, 15 Mar 2013)
New Revision: 5115
URL: http://trac.nginx.org/nginx/changeset/5115/nginx

Log:
Allow to reuse connections that wait their first request.

This should improve behavior under deficiency of connections.

Since SSL handshake usually takes significant amount of time,
we exclude connections from reusable queue during this period
to avoid premature flush of them.


Modified:
   trunk/src/http/ngx_http_request.c

Modified: trunk/src/http/ngx_http_request.c
===================================================================
--- trunk/src/http/ngx_http_request.c	2013-03-14 16:22:43 UTC (rev 5114)
+++ trunk/src/http/ngx_http_request.c	2013-03-15 19:49:54 UTC (rev 5115)
@@ -355,6 +355,7 @@
     }
 
     ngx_add_timer(rev, c->listening->post_accept_timeout);
+    ngx_reusable_connection(c, 1);
 
     if (ngx_handle_read_event(rev, 0) != NGX_OK) {
         ngx_http_close_connection(c);
@@ -383,6 +384,11 @@
         return;
     }
 
+    if (c->close) {
+        ngx_http_close_connection(c);
+        return;
+    }
+
     hc = c->data;
     cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module);
 
@@ -432,6 +438,7 @@
 
         if (!rev->timer_set) {
             ngx_add_timer(rev, c->listening->post_accept_timeout);
+            ngx_reusable_connection(c, 1);
         }
 
         if (ngx_handle_read_event(rev, 0) != NGX_OK) {
@@ -466,6 +473,8 @@
 
     c->log->action = "reading client request line";
 
+    ngx_reusable_connection(c, 0);
+
     c->data = ngx_http_create_request(c);
     if (c->data == NULL) {
         ngx_http_close_connection(c);
@@ -611,6 +620,11 @@
         return;
     }
 
+    if (c->close) {
+        ngx_http_close_connection(c);
+        return;
+    }
+
     n = recv(c->fd, (char *) buf, 1, MSG_PEEK);
 
     err = ngx_socket_errno;
@@ -631,6 +645,7 @@
 
             if (!rev->timer_set) {
                 ngx_add_timer(rev, c->listening->post_accept_timeout);
+                ngx_reusable_connection(c, 1);
             }
 
             if (ngx_handle_read_event(rev, 0) != NGX_OK) {
@@ -670,6 +685,8 @@
                     ngx_add_timer(rev, c->listening->post_accept_timeout);
                 }
 
+                ngx_reusable_connection(c, 0);
+
                 c->ssl->handler = ngx_http_ssl_handshake_handler;
                 return;
             }
@@ -714,6 +731,8 @@
         c->read->handler = ngx_http_wait_request_handler;
         /* STUB: epoll edge */ c->write->handler = ngx_http_empty_handler;
 
+        ngx_reusable_connection(c, 1);
+
         ngx_http_wait_request_handler(c->read);
 
         return;



More information about the nginx-devel mailing list