changeset 6200:abee77018d3a

Stream: common handler for upstream and downstream.
author Roman Arutyunyan <arut@nginx.com>
date Tue, 23 Jun 2015 20:17:47 +0300
parents 4b703a5a4631
children 24488e6db782
files src/stream/ngx_stream_proxy_module.c
diffstat 1 files changed, 20 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/stream/ngx_stream_proxy_module.c
+++ b/src/stream/ngx_stream_proxy_module.c
@@ -52,6 +52,8 @@ static void ngx_stream_proxy_connect(ngx
 static void ngx_stream_proxy_init_upstream(ngx_stream_session_t *s);
 static void ngx_stream_proxy_upstream_handler(ngx_event_t *ev);
 static void ngx_stream_proxy_downstream_handler(ngx_event_t *ev);
+static void ngx_stream_proxy_process_connection(ngx_event_t *ev,
+    ngx_uint_t from_upstream);
 static void ngx_stream_proxy_connect_handler(ngx_event_t *ev);
 static ngx_int_t ngx_stream_proxy_test_connect(ngx_connection_t *c);
 static ngx_int_t ngx_stream_proxy_process(ngx_stream_session_t *s,
@@ -815,12 +817,27 @@ done:
 static void
 ngx_stream_proxy_downstream_handler(ngx_event_t *ev)
 {
+    ngx_stream_proxy_process_connection(ev, ev->write);
+}
+
+
+static void
+ngx_stream_proxy_upstream_handler(ngx_event_t *ev)
+{
+    ngx_stream_proxy_process_connection(ev, !ev->write);
+}
+
+
+static void
+ngx_stream_proxy_process_connection(ngx_event_t *ev, ngx_uint_t from_upstream)
+{
     ngx_connection_t       *c;
     ngx_stream_session_t   *s;
     ngx_stream_upstream_t  *u;
 
     c = ev->data;
     s = c->data;
+    u = s->upstream;
 
     if (ev->timedout) {
         ngx_connection_error(c, NGX_ETIMEDOUT, "connection timed out");
@@ -828,35 +845,11 @@ ngx_stream_proxy_downstream_handler(ngx_
         return;
     }
 
-    u = s->upstream;
-
-    if (!ev->write) {
-        ngx_stream_proxy_process(s, 0, 0);
-
-    } else if (u->upstream_buf.start) {
-        ngx_stream_proxy_process(s, 1, 1);
+    if (from_upstream && u->upstream_buf.start == NULL) {
+        return;
     }
-}
-
 
-static void
-ngx_stream_proxy_upstream_handler(ngx_event_t *ev)
-{
-    ngx_connection_t       *c;
-    ngx_stream_session_t   *s;
-    ngx_stream_upstream_t  *u;
-
-    c = ev->data;
-    s = c->data;
-
-    u = s->upstream;
-
-    if (ev->write) {
-        ngx_stream_proxy_process(s, 0, 1);
-
-    } else if (u->upstream_buf.start) {
-        ngx_stream_proxy_process(s, 1, 0);
-    }
+    ngx_stream_proxy_process(s, from_upstream, ev->write);
 }