aboutsummaryrefslogtreecommitdiff
path: root/src/http
diff options
context:
space:
mode:
Diffstat (limited to 'src/http')
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_handler.c6
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_upstream.c2
-rw-r--r--src/http/ngx_http_request.c43
3 files changed, 37 insertions, 14 deletions
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c
index b7177a339..5d646bb1c 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -385,7 +385,7 @@ void ngx_http_proxy_check_broken_connection(ngx_event_t *ev)
if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
- if (!ev->kq_eof) {
+ if (!ev->pending_eof) {
return;
}
@@ -641,11 +641,11 @@ void ngx_http_proxy_close_connection(ngx_http_proxy_ctx_t *p)
ngx_del_conn(c, NGX_CLOSE_EVENT);
} else {
- if (c->read->active || c->read->posted) {
+ if (c->read->active || c->read->disabled) {
ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
}
- if (c->write->active || c->read->posted) {
+ if (c->write->active || c->read->disabled) {
ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
}
}
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index 83af1ad9c..9ed4d7f61 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -660,7 +660,7 @@ static void ngx_http_proxy_send_request(ngx_http_proxy_ctx_t *p)
if ((ngx_event_flags & NGX_HAVE_KQUEUE_EVENT)
&& !p->request_sent
- && c->write->kq_eof)
+ && c->write->pending_eof)
{
ngx_log_error(NGX_LOG_ERR, c->log, c->write->kq_errno,
"connect() failed");
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 0063ee2bc..74618313b 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1017,7 +1017,7 @@ void ngx_http_finalize_request(ngx_http_request_t *r, int rc)
ngx_del_timer(r->connection->write);
}
- if (r->connection->read->kq_eof) {
+ if (r->connection->read->pending_eof) {
#if (NGX_KQUEUE)
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log,
r->connection->read->kq_errno,
@@ -1730,11 +1730,11 @@ void ngx_http_close_connection(ngx_connection_t *c)
ngx_del_conn(c, NGX_CLOSE_EVENT);
} else {
- if (c->read->active || c->read->posted || c->read->disabled) {
+ if (c->read->active || c->read->disabled) {
ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
}
- if (c->write->active || c->write->posted || c->write->disabled) {
+ if (c->write->active || c->write->disabled) {
ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
}
}
@@ -1745,26 +1745,49 @@ void ngx_http_close_connection(ngx_connection_t *c)
* before we clean the connection
*/
- fd = c->fd;
- c->fd = (ngx_socket_t) -1;
- c->data = NULL;
- ngx_destroy_pool(c->pool);
-
#if (NGX_THREADS)
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_OK) {
+
ngx_unlock(&c->lock);
c->read->locked = 0;
c->write->locked = 0;
+ c->read->closed = 1;
+ c->write->closed = 1;
+
+ if (c->read->prev) {
+ ngx_delete_posted_event(c->read);
+ }
+
+ if (c->write->prev) {
+ ngx_delete_posted_event(c->write);
+ }
+
ngx_mutex_unlock(ngx_posted_events_mutex);
}
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0,
- "connection lock: %d " PTR_FMT, c->lock, &c->lock);
+#else
+
+ c->read->closed = 1;
+ c->write->closed = 1;
+
+ if (c->read->prev) {
+ ngx_delete_posted_event(c->read);
+ }
+
+ if (c->write->prev) {
+ ngx_delete_posted_event(c->write);
+ }
#endif
+ fd = c->fd;
+ c->fd = (ngx_socket_t) -1;
+ c->data = NULL;
+
+ ngx_destroy_pool(c->pool);
+
if (ngx_close_socket(fd) == -1) {
/* we use ngx_cycle->log because c->log was in c->pool */