Mercurial > hg > nginx-quic
comparison src/http/modules/ngx_http_upstream_least_conn_module.c @ 6102:3264b7828f72
Upstreams: locking.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Tue, 14 Apr 2015 19:01:23 +0300 |
parents | c44459611d91 |
children | 2cd019520210 |
comparison
equal
deleted
inserted
replaced
6101:682d8222c6b1 | 6102:3264b7828f72 |
---|---|
120 | 120 |
121 now = ngx_time(); | 121 now = ngx_time(); |
122 | 122 |
123 peers = rrp->peers; | 123 peers = rrp->peers; |
124 | 124 |
125 ngx_http_upstream_rr_peers_wlock(peers); | |
126 | |
125 best = NULL; | 127 best = NULL; |
126 total = 0; | 128 total = 0; |
127 | 129 |
128 #if (NGX_SUPPRESS_WARN) | 130 #if (NGX_SUPPRESS_WARN) |
129 many = 0; | 131 many = 0; |
239 n = p / (8 * sizeof(uintptr_t)); | 241 n = p / (8 * sizeof(uintptr_t)); |
240 m = (uintptr_t) 1 << p % (8 * sizeof(uintptr_t)); | 242 m = (uintptr_t) 1 << p % (8 * sizeof(uintptr_t)); |
241 | 243 |
242 rrp->tried[n] |= m; | 244 rrp->tried[n] |= m; |
243 | 245 |
246 ngx_http_upstream_rr_peers_unlock(peers); | |
247 | |
244 return NGX_OK; | 248 return NGX_OK; |
245 | 249 |
246 failed: | 250 failed: |
247 | 251 |
248 if (peers->next) { | 252 if (peers->next) { |
256 | 260 |
257 for (i = 0; i < n; i++) { | 261 for (i = 0; i < n; i++) { |
258 rrp->tried[i] = 0; | 262 rrp->tried[i] = 0; |
259 } | 263 } |
260 | 264 |
265 ngx_http_upstream_rr_peers_unlock(peers); | |
266 | |
261 rc = ngx_http_upstream_get_least_conn_peer(pc, rrp); | 267 rc = ngx_http_upstream_get_least_conn_peer(pc, rrp); |
262 | 268 |
263 if (rc != NGX_BUSY) { | 269 if (rc != NGX_BUSY) { |
264 return rc; | 270 return rc; |
265 } | 271 } |
272 | |
273 ngx_http_upstream_rr_peers_wlock(peers); | |
266 } | 274 } |
267 | 275 |
268 /* all peers failed, mark them as live for quick recovery */ | 276 /* all peers failed, mark them as live for quick recovery */ |
269 | 277 |
270 for (peer = peers->peer; peer; peer = peer->next) { | 278 for (peer = peers->peer; peer; peer = peer->next) { |
271 peer->fails = 0; | 279 peer->fails = 0; |
272 } | 280 } |
281 | |
282 ngx_http_upstream_rr_peers_unlock(peers); | |
273 | 283 |
274 pc->name = peers->name; | 284 pc->name = peers->name; |
275 | 285 |
276 return NGX_BUSY; | 286 return NGX_BUSY; |
277 } | 287 } |