Mercurial > hg > nginx
comparison src/http/ngx_http_upstream.c @ 889:a9a7e4b1a72b
the previous fix does not actually fix overflow
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 06 Dec 2006 11:33:18 +0000 |
parents | bb6e1bbcdd67 |
children | f029e69eb010 |
comparison
equal
deleted
inserted
replaced
888:bb6e1bbcdd67 | 889:a9a7e4b1a72b |
---|---|
491 static void | 491 static void |
492 ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u) | 492 ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u) |
493 { | 493 { |
494 ngx_int_t rc; | 494 ngx_int_t rc; |
495 ngx_time_t *tp; | 495 ngx_time_t *tp; |
496 ngx_msec_int_t ms; | |
497 ngx_connection_t *c; | 496 ngx_connection_t *c; |
498 | 497 |
499 r->connection->log->action = "connecting to upstream"; | 498 r->connection->log->action = "connecting to upstream"; |
500 | 499 |
501 r->connection->single_connection = 0; | 500 r->connection->single_connection = 0; |
502 | 501 |
503 if (u->state && u->state->response_time) { | 502 if (u->state && u->state->response_sec) { |
504 tp = ngx_timeofday(); | 503 tp = ngx_timeofday(); |
505 ms = (ngx_msec_t) tp->sec * 1000 + tp->msec - u->state->response_time; | 504 u->state->response_sec = tp->sec - u->state->response_sec; |
506 u->state->response_time = (ms >= 0) ? ms : 0; | 505 u->state->response_msec = tp->msec - u->state->response_msec; |
507 } | 506 } |
508 | 507 |
509 u->state = ngx_array_push(&u->states); | 508 u->state = ngx_array_push(&u->states); |
510 if (u->state == NULL) { | 509 if (u->state == NULL) { |
511 ngx_http_upstream_finalize_request(r, u, | 510 ngx_http_upstream_finalize_request(r, u, |
514 } | 513 } |
515 | 514 |
516 ngx_memzero(u->state, sizeof(ngx_http_upstream_state_t)); | 515 ngx_memzero(u->state, sizeof(ngx_http_upstream_state_t)); |
517 | 516 |
518 tp = ngx_timeofday(); | 517 tp = ngx_timeofday(); |
519 u->state->response_time = (ngx_msec_t) tp->sec * 1000 + tp->msec; | 518 u->state->response_sec = tp->sec; |
519 u->state->response_msec = tp->msec; | |
520 | 520 |
521 rc = ngx_event_connect_peer(&u->peer); | 521 rc = ngx_event_connect_peer(&u->peer); |
522 | 522 |
523 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | 523 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
524 "http upstream connect: %i", rc); | 524 "http upstream connect: %i", rc); |
2041 | 2041 |
2042 static void | 2042 static void |
2043 ngx_http_upstream_finalize_request(ngx_http_request_t *r, | 2043 ngx_http_upstream_finalize_request(ngx_http_request_t *r, |
2044 ngx_http_upstream_t *u, ngx_int_t rc) | 2044 ngx_http_upstream_t *u, ngx_int_t rc) |
2045 { | 2045 { |
2046 ngx_time_t *tp; | 2046 ngx_time_t *tp; |
2047 ngx_msec_int_t ms; | |
2048 | 2047 |
2049 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | 2048 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2050 "finalize http upstream request: %i", rc); | 2049 "finalize http upstream request: %i", rc); |
2051 | 2050 |
2052 *u->cleanup = NULL; | 2051 *u->cleanup = NULL; |
2053 | 2052 |
2054 if (u->state->response_time) { | 2053 if (u->state->response_sec) { |
2055 tp = ngx_timeofday(); | 2054 tp = ngx_timeofday(); |
2056 ms = (ngx_msec_t) tp->sec * 1000 + tp->msec - u->state->response_time; | 2055 u->state->response_sec = tp->sec - u->state->response_sec; |
2057 u->state->response_time = (ms >= 0) ? ms : 0; | 2056 u->state->response_msec = tp->msec - u->state->response_msec; |
2058 } | 2057 } |
2059 | 2058 |
2060 u->finalize_request(r, rc); | 2059 u->finalize_request(r, rc); |
2061 | 2060 |
2062 u->peer.free(&u->peer, u->peer.data, 0); | 2061 u->peer.free(&u->peer, u->peer.data, 0); |
2529 ngx_http_variable_value_t *v, uintptr_t data) | 2528 ngx_http_variable_value_t *v, uintptr_t data) |
2530 { | 2529 { |
2531 u_char *p; | 2530 u_char *p; |
2532 size_t len; | 2531 size_t len; |
2533 ngx_uint_t i; | 2532 ngx_uint_t i; |
2533 ngx_msec_int_t ms; | |
2534 ngx_http_upstream_t *u; | 2534 ngx_http_upstream_t *u; |
2535 ngx_http_upstream_state_t *state; | 2535 ngx_http_upstream_state_t *state; |
2536 | 2536 |
2537 v->valid = 1; | 2537 v->valid = 1; |
2538 v->no_cachable = 0; | 2538 v->no_cachable = 0; |
2560 for ( ;; ) { | 2560 for ( ;; ) { |
2561 if (state[i].status == 0) { | 2561 if (state[i].status == 0) { |
2562 *p++ = '-'; | 2562 *p++ = '-'; |
2563 | 2563 |
2564 } else { | 2564 } else { |
2565 p = ngx_sprintf(p, "%d.%03d", | 2565 ms = state[i].response_sec * 1000 + state[i].response_msec; |
2566 state[i].response_time / 1000, | 2566 ms = (ms >= 0) ? ms : 0; |
2567 state[i].response_time % 1000); | 2567 p = ngx_sprintf(p, "%d.%03d", ms / 1000, ms % 1000); |
2568 } | 2568 } |
2569 | 2569 |
2570 if (++i == u->states.nelts) { | 2570 if (++i == u->states.nelts) { |
2571 break; | 2571 break; |
2572 } | 2572 } |