Mercurial > hg > nginx
comparison src/http/modules/ngx_http_upstream_keepalive_module.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 | 63bc961253eb |
children | 822b82191940 |
comparison
equal
deleted
inserted
replaced
5161:a5f7d455e271 | 5162:ee9a043765ea |
---|---|
34 | 34 |
35 #if (NGX_HTTP_SSL) | 35 #if (NGX_HTTP_SSL) |
36 ngx_event_set_peer_session_pt original_set_session; | 36 ngx_event_set_peer_session_pt original_set_session; |
37 ngx_event_save_peer_session_pt original_save_session; | 37 ngx_event_save_peer_session_pt original_save_session; |
38 #endif | 38 #endif |
39 | |
40 ngx_uint_t failed; /* unsigned:1 */ | |
41 | 39 |
42 } ngx_http_upstream_keepalive_peer_data_t; | 40 } ngx_http_upstream_keepalive_peer_data_t; |
43 | 41 |
44 | 42 |
45 typedef struct { | 43 typedef struct { |
218 ngx_connection_t *c; | 216 ngx_connection_t *c; |
219 | 217 |
220 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, | 218 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
221 "get keepalive peer"); | 219 "get keepalive peer"); |
222 | 220 |
223 kp->failed = 0; | |
224 | |
225 /* ask balancer */ | 221 /* ask balancer */ |
226 | 222 |
227 rc = kp->original_get_peer(pc, kp->data); | 223 rc = kp->original_get_peer(pc, kp->data); |
228 | 224 |
229 if (rc != NGX_OK) { | 225 if (rc != NGX_OK) { |
280 ngx_http_upstream_t *u; | 276 ngx_http_upstream_t *u; |
281 | 277 |
282 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, | 278 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
283 "free keepalive peer"); | 279 "free keepalive peer"); |
284 | 280 |
285 /* remember failed state - peer.free() may be called more than once */ | |
286 | |
287 if (state & NGX_PEER_FAILED) { | |
288 kp->failed = 1; | |
289 } | |
290 | |
291 /* cache valid connections */ | 281 /* cache valid connections */ |
292 | 282 |
293 u = kp->upstream; | 283 u = kp->upstream; |
294 c = pc->connection; | 284 c = pc->connection; |
295 | 285 |
296 if (kp->failed | 286 if (state & NGX_PEER_FAILED |
297 || c == NULL | 287 || c == NULL |
298 || c->read->eof | 288 || c->read->eof |
299 || c->read->error | 289 || c->read->error |
300 || c->read->timedout | 290 || c->read->timedout |
301 || c->write->error | 291 || c->write->error |