Mercurial > hg > nginx-mail
comparison src/http/ngx_http_request.c @ 459:dac47e9ef0d5 NGINX_0_7_27
nginx 0.7.27
*) Feature: the "try_files" directive.
*) Feature: variables support in the "fastcgi_pass" directive.
*) Feature: now the $geo variable may get an address from a
variable.
Thanks to Andrei Nigmatulin.
*) Feature: now a location's modifier may be used without space before
name.
*) Feature: the $upstream_response_length variable.
*) Bugfix: now a "add_header" directive does not add an empty value.
*) Bugfix: if zero length static file was requested, then nginx just
closed connection; the bug had appeared in 0.7.25.
*) Bugfix: a MOVE method could not move file in non-existent directory.
*) Bugfix: a segmentation fault occurred in worker process, if no one
named location was defined in server, but some one was used in an
error_page directive.
Thanks to Sergey Bochenkov.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 15 Dec 2008 00:00:00 +0300 |
parents | e7dbea1ee115 |
children | 670af56a1158 |
comparison
equal
deleted
inserted
replaced
458:3b8e9d1bc9bb | 459:dac47e9ef0d5 |
---|---|
213 return; | 213 return; |
214 } | 214 } |
215 | 215 |
216 ngx_add_timer(rev, c->listening->post_accept_timeout); | 216 ngx_add_timer(rev, c->listening->post_accept_timeout); |
217 | 217 |
218 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { | 218 if (ngx_handle_read_event(rev, 0) != NGX_OK) { |
219 #if (NGX_STAT_STUB) | 219 #if (NGX_STAT_STUB) |
220 ngx_atomic_fetch_add(ngx_stat_reading, -1); | 220 ngx_atomic_fetch_add(ngx_stat_reading, -1); |
221 #endif | 221 #endif |
222 ngx_http_close_connection(c); | 222 ngx_http_close_connection(c); |
223 return; | 223 return; |
502 | 502 |
503 if (!rev->timer_set) { | 503 if (!rev->timer_set) { |
504 ngx_add_timer(rev, c->listening->post_accept_timeout); | 504 ngx_add_timer(rev, c->listening->post_accept_timeout); |
505 } | 505 } |
506 | 506 |
507 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { | 507 if (ngx_handle_read_event(rev, 0) != NGX_OK) { |
508 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | 508 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); |
509 } | 509 } |
510 | 510 |
511 return; | 511 return; |
512 } | 512 } |
1036 if (!rev->timer_set) { | 1036 if (!rev->timer_set) { |
1037 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module); | 1037 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module); |
1038 ngx_add_timer(rev, cscf->client_header_timeout); | 1038 ngx_add_timer(rev, cscf->client_header_timeout); |
1039 } | 1039 } |
1040 | 1040 |
1041 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { | 1041 if (ngx_handle_read_event(rev, 0) != NGX_OK) { |
1042 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | 1042 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); |
1043 return NGX_ERROR; | 1043 return NGX_ERROR; |
1044 } | 1044 } |
1045 | 1045 |
1046 return NGX_AGAIN; | 1046 return NGX_AGAIN; |
1881 | 1881 |
1882 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, | 1882 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, |
1883 "http wake parent request: \"%V?%V\"", | 1883 "http wake parent request: \"%V?%V\"", |
1884 &pr->uri, &pr->args); | 1884 &pr->uri, &pr->args); |
1885 | 1885 |
1886 ngx_http_run_posted_requests(c); | |
1887 | |
1888 return; | 1886 return; |
1889 } | 1887 } |
1890 | 1888 |
1891 if (r->buffered || c->buffered || r->postponed) { | 1889 if (r->buffered || c->buffered || r->postponed) { |
1892 | 1890 |
1971 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); | 1969 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); |
1972 if (!wev->delayed) { | 1970 if (!wev->delayed) { |
1973 ngx_add_timer(wev, clcf->send_timeout); | 1971 ngx_add_timer(wev, clcf->send_timeout); |
1974 } | 1972 } |
1975 | 1973 |
1976 if (ngx_handle_write_event(wev, clcf->send_lowat) == NGX_ERROR) { | 1974 if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) { |
1977 ngx_http_close_request(r, 0); | 1975 ngx_http_close_request(r, 0); |
1978 return NGX_ERROR; | 1976 return NGX_ERROR; |
1979 } | 1977 } |
1980 | 1978 |
1981 return NGX_OK; | 1979 return NGX_OK; |
2012 wev->delayed = 0; | 2010 wev->delayed = 0; |
2013 | 2011 |
2014 if (!wev->ready) { | 2012 if (!wev->ready) { |
2015 ngx_add_timer(wev, clcf->send_timeout); | 2013 ngx_add_timer(wev, clcf->send_timeout); |
2016 | 2014 |
2017 if (ngx_handle_write_event(wev, clcf->send_lowat) == NGX_ERROR) { | 2015 if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) { |
2018 ngx_http_close_request(r, 0); | 2016 ngx_http_close_request(r, 0); |
2019 } | 2017 } |
2020 | 2018 |
2021 return; | 2019 return; |
2022 } | 2020 } |
2024 } else { | 2022 } else { |
2025 if (wev->delayed) { | 2023 if (wev->delayed) { |
2026 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0, | 2024 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0, |
2027 "http writer delayed"); | 2025 "http writer delayed"); |
2028 | 2026 |
2029 if (ngx_handle_write_event(wev, clcf->send_lowat) == NGX_ERROR) { | 2027 if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) { |
2030 ngx_http_close_request(r, 0); | 2028 ngx_http_close_request(r, 0); |
2031 } | 2029 } |
2032 | 2030 |
2033 return; | 2031 return; |
2034 } | 2032 } |
2048 | 2046 |
2049 if (!wev->ready && !wev->delayed) { | 2047 if (!wev->ready && !wev->delayed) { |
2050 ngx_add_timer(wev, clcf->send_timeout); | 2048 ngx_add_timer(wev, clcf->send_timeout); |
2051 } | 2049 } |
2052 | 2050 |
2053 if (ngx_handle_write_event(wev, clcf->send_lowat) == NGX_ERROR) { | 2051 if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) { |
2054 ngx_http_close_request(r, 0); | 2052 ngx_http_close_request(r, 0); |
2055 } | 2053 } |
2056 | 2054 |
2057 return; | 2055 return; |
2058 } | 2056 } |
2083 /* aio does not call this handler */ | 2081 /* aio does not call this handler */ |
2084 | 2082 |
2085 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) | 2083 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) |
2086 && r->connection->read->active) | 2084 && r->connection->read->active) |
2087 { | 2085 { |
2088 if (ngx_del_event(r->connection->read, NGX_READ_EVENT, 0) | 2086 if (ngx_del_event(r->connection->read, NGX_READ_EVENT, 0) != NGX_OK) { |
2089 == NGX_ERROR) | |
2090 { | |
2091 ngx_http_close_request(r, 0); | 2087 ngx_http_close_request(r, 0); |
2092 } | 2088 } |
2093 } | 2089 } |
2094 } | 2090 } |
2095 | 2091 |
2147 | 2143 |
2148 /* aio does not call this handler */ | 2144 /* aio does not call this handler */ |
2149 | 2145 |
2150 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && rev->active) { | 2146 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && rev->active) { |
2151 | 2147 |
2152 if (ngx_del_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) { | 2148 if (ngx_del_event(rev, NGX_READ_EVENT, 0) != NGX_OK) { |
2153 ngx_http_close_request(r, 0); | 2149 ngx_http_close_request(r, 0); |
2154 } | 2150 } |
2155 } | 2151 } |
2156 | 2152 |
2157 return; | 2153 return; |
2241 | 2237 |
2242 c->data = hc; | 2238 c->data = hc; |
2243 | 2239 |
2244 ngx_add_timer(rev, clcf->keepalive_timeout); | 2240 ngx_add_timer(rev, clcf->keepalive_timeout); |
2245 | 2241 |
2246 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { | 2242 if (ngx_handle_read_event(rev, 0) != NGX_OK) { |
2247 ngx_http_close_connection(c); | 2243 ngx_http_close_connection(c); |
2248 return; | 2244 return; |
2249 } | 2245 } |
2250 | 2246 |
2251 wev = c->write; | 2247 wev = c->write; |
2328 #endif | 2324 #endif |
2329 | 2325 |
2330 rev->handler = ngx_http_keepalive_handler; | 2326 rev->handler = ngx_http_keepalive_handler; |
2331 | 2327 |
2332 if (wev->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) { | 2328 if (wev->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) { |
2333 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) { | 2329 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) != NGX_OK) { |
2334 ngx_http_close_connection(c); | 2330 ngx_http_close_connection(c); |
2335 return; | 2331 return; |
2336 } | 2332 } |
2337 } | 2333 } |
2338 | 2334 |
2453 | 2449 |
2454 n = c->recv(c, b->last, size); | 2450 n = c->recv(c, b->last, size); |
2455 c->log_error = NGX_ERROR_INFO; | 2451 c->log_error = NGX_ERROR_INFO; |
2456 | 2452 |
2457 if (n == NGX_AGAIN) { | 2453 if (n == NGX_AGAIN) { |
2458 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { | 2454 if (ngx_handle_read_event(rev, 0) != NGX_OK) { |
2459 ngx_http_close_connection(c); | 2455 ngx_http_close_connection(c); |
2460 } | 2456 } |
2461 | 2457 |
2462 return; | 2458 return; |
2463 } | 2459 } |
2506 rev->handler = ngx_http_lingering_close_handler; | 2502 rev->handler = ngx_http_lingering_close_handler; |
2507 | 2503 |
2508 r->lingering_time = ngx_time() + (time_t) (clcf->lingering_time / 1000); | 2504 r->lingering_time = ngx_time() + (time_t) (clcf->lingering_time / 1000); |
2509 ngx_add_timer(rev, clcf->lingering_timeout); | 2505 ngx_add_timer(rev, clcf->lingering_timeout); |
2510 | 2506 |
2511 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { | 2507 if (ngx_handle_read_event(rev, 0) != NGX_OK) { |
2512 ngx_http_close_request(r, 0); | 2508 ngx_http_close_request(r, 0); |
2513 return; | 2509 return; |
2514 } | 2510 } |
2515 | 2511 |
2516 wev = c->write; | 2512 wev = c->write; |
2517 wev->handler = ngx_http_empty_handler; | 2513 wev->handler = ngx_http_empty_handler; |
2518 | 2514 |
2519 if (wev->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) { | 2515 if (wev->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) { |
2520 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) { | 2516 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) != NGX_OK) { |
2521 ngx_http_close_request(r, 0); | 2517 ngx_http_close_request(r, 0); |
2522 return; | 2518 return; |
2523 } | 2519 } |
2524 } | 2520 } |
2525 | 2521 |
2574 return; | 2570 return; |
2575 } | 2571 } |
2576 | 2572 |
2577 } while (rev->ready); | 2573 } while (rev->ready); |
2578 | 2574 |
2579 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { | 2575 if (ngx_handle_read_event(rev, 0) != NGX_OK) { |
2580 ngx_http_close_request(r, 0); | 2576 ngx_http_close_request(r, 0); |
2581 return; | 2577 return; |
2582 } | 2578 } |
2583 | 2579 |
2584 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); | 2580 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); |