comparison src/http/ngx_http_upstream.c @ 5162:ee9a043765ea stable-1.2

Merge of r5133, r5134: peer.free() and peer.get() balance. *) Upstream: only call peer.free() if peer.get() selected a peer. *) Upstream: removed double-free workarounds in peer.free() methods.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 29 Mar 2013 18:16:27 +0000
parents d6980725e25c
children
comparison
equal deleted inserted replaced
5161:a5f7d455e271 5162:ee9a043765ea
2844 2844
2845 #if 0 2845 #if 0
2846 ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock); 2846 ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
2847 #endif 2847 #endif
2848 2848
2849 if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_404) { 2849 if (u->peer.sockaddr) {
2850 state = NGX_PEER_NEXT; 2850
2851 } else { 2851 if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_404) {
2852 state = NGX_PEER_FAILED; 2852 state = NGX_PEER_NEXT;
2853 } 2853 } else {
2854 2854 state = NGX_PEER_FAILED;
2855 if (ft_type != NGX_HTTP_UPSTREAM_FT_NOLIVE) { 2855 }
2856
2856 u->peer.free(&u->peer, u->peer.data, state); 2857 u->peer.free(&u->peer, u->peer.data, state);
2858 u->peer.sockaddr = NULL;
2857 } 2859 }
2858 2860
2859 if (ft_type == NGX_HTTP_UPSTREAM_FT_TIMEOUT) { 2861 if (ft_type == NGX_HTTP_UPSTREAM_FT_TIMEOUT) {
2860 ngx_log_error(NGX_LOG_ERR, r->connection->log, NGX_ETIMEDOUT, 2862 ngx_log_error(NGX_LOG_ERR, r->connection->log, NGX_ETIMEDOUT,
2861 "upstream timed out"); 2863 "upstream timed out");
3011 } 3013 }
3012 } 3014 }
3013 3015
3014 u->finalize_request(r, rc); 3016 u->finalize_request(r, rc);
3015 3017
3016 if (u->peer.free) { 3018 if (u->peer.free && u->peer.sockaddr) {
3017 u->peer.free(&u->peer, u->peer.data, 0); 3019 u->peer.free(&u->peer, u->peer.data, 0);
3020 u->peer.sockaddr = NULL;
3018 } 3021 }
3019 3022
3020 if (u->peer.connection) { 3023 if (u->peer.connection) {
3021 3024
3022 #if (NGX_HTTP_SSL) 3025 #if (NGX_HTTP_SSL)