comparison src/http/ngx_http_upstream.c @ 5132:9bcf89ca78d2

Upstream: only call peer.free() if peer.get() selected a peer.
author Ruslan Ermilov <ru@nginx.com>
date Mon, 25 Mar 2013 13:14:49 +0000
parents c0f7b94e88ba
children afea5259e05c
comparison
equal deleted inserted replaced
5131:566cd32d8bac 5132:9bcf89ca78d2
3145 3145
3146 #if 0 3146 #if 0
3147 ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock); 3147 ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
3148 #endif 3148 #endif
3149 3149
3150 if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_404) { 3150 if (u->peer.sockaddr) {
3151 state = NGX_PEER_NEXT; 3151
3152 } else { 3152 if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_404) {
3153 state = NGX_PEER_FAILED; 3153 state = NGX_PEER_NEXT;
3154 } 3154 } else {
3155 3155 state = NGX_PEER_FAILED;
3156 if (ft_type != NGX_HTTP_UPSTREAM_FT_NOLIVE) { 3156 }
3157
3157 u->peer.free(&u->peer, u->peer.data, state); 3158 u->peer.free(&u->peer, u->peer.data, state);
3159 u->peer.sockaddr = NULL;
3158 } 3160 }
3159 3161
3160 if (ft_type == NGX_HTTP_UPSTREAM_FT_TIMEOUT) { 3162 if (ft_type == NGX_HTTP_UPSTREAM_FT_TIMEOUT) {
3161 ngx_log_error(NGX_LOG_ERR, r->connection->log, NGX_ETIMEDOUT, 3163 ngx_log_error(NGX_LOG_ERR, r->connection->log, NGX_ETIMEDOUT,
3162 "upstream timed out"); 3164 "upstream timed out");
3312 } 3314 }
3313 } 3315 }
3314 3316
3315 u->finalize_request(r, rc); 3317 u->finalize_request(r, rc);
3316 3318
3317 if (u->peer.free) { 3319 if (u->peer.free && u->peer.sockaddr) {
3318 u->peer.free(&u->peer, u->peer.data, 0); 3320 u->peer.free(&u->peer, u->peer.data, 0);
3321 u->peer.sockaddr = NULL;
3319 } 3322 }
3320 3323
3321 if (u->peer.connection) { 3324 if (u->peer.connection) {
3322 3325
3323 #if (NGX_HTTP_SSL) 3326 #if (NGX_HTTP_SSL)