From 801a35df3c43b4ceb88e9ad5aa69a4366d7b4051 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Mon, 19 Oct 2009 16:12:13 +0000 Subject: [PATCH] restore discard body handler after ngx_http_set_writer() set it to ngx_http_test_reading(), the bug was introduced in r3050 --- src/http/ngx_http.h | 1 + src/http/ngx_http_request.c | 11 ++++++++--- src/http/ngx_http_request_body.c | 7 +++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/http/ngx_http.h b/src/http/ngx_http.h index 5519a5b85..c165491dc 100644 --- a/src/http/ngx_http.h +++ b/src/http/ngx_http.h @@ -118,6 +118,7 @@ size_t ngx_http_get_time(char *buf, time_t t); ngx_int_t ngx_http_discard_request_body(ngx_http_request_t *r); +void ngx_http_discarded_request_body_handler(ngx_http_request_t *r); void ngx_http_block_reading(ngx_http_request_t *r); void ngx_http_test_reading(ngx_http_request_t *r); diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index 485a56469..bad89a4aa 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -2105,10 +2105,15 @@ ngx_http_finalize_connection(ngx_http_request_t *r) if (r->main->count != 1) { - if (r->discard_body && r->lingering_time == 0) { - r->lingering_time = ngx_time() + if (r->discard_body) { + r->read_event_handler = ngx_http_discarded_request_body_handler; + r->write_event_handler = ngx_http_request_empty_handler; + + if (r->lingering_time == 0) { + r->lingering_time = ngx_time() + (time_t) (clcf->lingering_time / 1000); - ngx_add_timer(r->connection->read, clcf->lingering_timeout); + ngx_add_timer(r->connection->read, clcf->lingering_timeout); + } } ngx_http_close_request(r, 0); diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c index 62c962db7..be311a612 100644 --- a/src/http/ngx_http_request_body.c +++ b/src/http/ngx_http_request_body.c @@ -13,7 +13,6 @@ static void ngx_http_read_client_request_body_handler(ngx_http_request_t *r); static ngx_int_t ngx_http_do_read_client_request_body(ngx_http_request_t *r); static ngx_int_t ngx_http_write_request_body(ngx_http_request_t *r, ngx_chain_t *body); -static void ngx_http_read_discarded_request_body_handler(ngx_http_request_t *r); static ngx_int_t ngx_http_read_discarded_request_body(ngx_http_request_t *r); static ngx_int_t ngx_http_test_expect(ngx_http_request_t *r); @@ -470,7 +469,7 @@ ngx_http_discard_request_body(ngx_http_request_t *r) } } - r->read_event_handler = ngx_http_read_discarded_request_body_handler; + r->read_event_handler = ngx_http_discarded_request_body_handler; if (ngx_handle_read_event(rev, 0) != NGX_OK) { return NGX_HTTP_INTERNAL_SERVER_ERROR; @@ -488,8 +487,8 @@ ngx_http_discard_request_body(ngx_http_request_t *r) } -static void -ngx_http_read_discarded_request_body_handler(ngx_http_request_t *r) +void +ngx_http_discarded_request_body_handler(ngx_http_request_t *r) { ngx_int_t rc; ngx_msec_t timer;