diff options
Diffstat (limited to 'src/http')
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_handler.c | 6 | ||||
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_upstream.c | 2 | ||||
-rw-r--r-- | src/http/ngx_http_request.c | 43 |
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 */ |