comparison src/http/ngx_http_request.c @ 430: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
429:3b8e9d1bc9bb 430: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);