Mercurial > hg > nginx
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) |