aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ngx_connection.c')
-rw-r--r--src/core/ngx_connection.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index a7371bf89..3f36d3155 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -372,7 +372,9 @@ ngx_close_listening_sockets(ngx_cycle_t *cycle)
ngx_connection_t *
ngx_get_connection(ngx_socket_t s, ngx_log_t *log)
{
- ngx_connection_t *c;
+ ngx_uint_t instance;
+ ngx_event_t *rev, *wev;
+ ngx_connection_t *c;
/* disable warning: Win32 SOCKET is u_int while UNIX socket is int */
@@ -407,6 +409,32 @@ ngx_get_connection(ngx_socket_t s, ngx_log_t *log)
ngx_cycle->files[s] = c;
}
+ rev = c->read;
+ wev = c->write;
+
+ ngx_memzero(c, sizeof(ngx_connection_t));
+
+ c->read = rev;
+ c->write = wev;
+ c->fd = s;
+ c->log = log;
+
+ instance = rev->instance;
+
+ ngx_memzero(rev, sizeof(ngx_event_t));
+ ngx_memzero(wev, sizeof(ngx_event_t));
+
+ rev->instance = !instance;
+ wev->instance = !instance;
+
+ rev->index = NGX_INVALID_INDEX;
+ wev->index = NGX_INVALID_INDEX;
+
+ rev->data = c;
+ wev->data = c;
+
+ wev->write = 1;
+
return c;
}