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 }