Mercurial > hg > nginx-quic
diff 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 |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_upstream_least_conn_module.c +++ b/src/http/modules/ngx_http_upstream_least_conn_module.c @@ -122,6 +122,8 @@ ngx_http_upstream_get_least_conn_peer(ng peers = rrp->peers; + ngx_http_upstream_rr_peers_wlock(peers); + best = NULL; total = 0; @@ -241,6 +243,8 @@ ngx_http_upstream_get_least_conn_peer(ng rrp->tried[n] |= m; + ngx_http_upstream_rr_peers_unlock(peers); + return NGX_OK; failed: @@ -258,11 +262,15 @@ failed: rrp->tried[i] = 0; } + ngx_http_upstream_rr_peers_unlock(peers); + rc = ngx_http_upstream_get_least_conn_peer(pc, rrp); if (rc != NGX_BUSY) { return rc; } + + ngx_http_upstream_rr_peers_wlock(peers); } /* all peers failed, mark them as live for quick recovery */ @@ -271,6 +279,8 @@ failed: peer->fails = 0; } + ngx_http_upstream_rr_peers_unlock(peers); + pc->name = peers->name; return NGX_BUSY;