mirror of
https://github.com/nginx/nginx.git
synced 2026-05-13 09:36:42 +00:00
Upstream: locked version of ngx_*_upstream_free_round_robin_peer().
This allows optimizing ngx_http_upstream_free_least_time_peer() by not releasing and re-taking the same lock.
This commit is contained in:
parent
35510ddc94
commit
45554176ca
4 changed files with 34 additions and 6 deletions
|
|
@ -1007,6 +1007,21 @@ failed:
|
|||
void
|
||||
ngx_http_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, void *data,
|
||||
ngx_uint_t state)
|
||||
{
|
||||
#if (NGX_HTTP_UPSTREAM_ZONE)
|
||||
ngx_http_upstream_rr_peer_data_t *rrp = data;
|
||||
|
||||
ngx_http_upstream_rr_peers_rlock(rrp->peers);
|
||||
ngx_http_upstream_rr_peer_lock(rrp->peers, rrp->current);
|
||||
#endif
|
||||
|
||||
ngx_http_upstream_free_round_robin_peer_locked(pc, data, state);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_http_upstream_free_round_robin_peer_locked(ngx_peer_connection_t *pc,
|
||||
void *data, ngx_uint_t state)
|
||||
{
|
||||
ngx_http_upstream_rr_peer_data_t *rrp = data;
|
||||
|
||||
|
|
@ -1020,9 +1035,6 @@ ngx_http_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, void *data,
|
|||
|
||||
peer = rrp->current;
|
||||
|
||||
ngx_http_upstream_rr_peers_rlock(rrp->peers);
|
||||
ngx_http_upstream_rr_peer_lock(rrp->peers, peer);
|
||||
|
||||
if (rrp->peers->single) {
|
||||
|
||||
if (peer->fails) {
|
||||
|
|
|
|||
|
|
@ -248,6 +248,8 @@ ngx_int_t ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc,
|
|||
void *data);
|
||||
void ngx_http_upstream_free_round_robin_peer(ngx_peer_connection_t *pc,
|
||||
void *data, ngx_uint_t state);
|
||||
void ngx_http_upstream_free_round_robin_peer_locked(ngx_peer_connection_t *pc,
|
||||
void *data, ngx_uint_t state);
|
||||
|
||||
#if (NGX_HTTP_SSL)
|
||||
ngx_int_t
|
||||
|
|
|
|||
|
|
@ -791,6 +791,21 @@ ngx_stream_upstream_get_peer(ngx_stream_upstream_rr_peer_data_t *rrp)
|
|||
void
|
||||
ngx_stream_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, void *data,
|
||||
ngx_uint_t state)
|
||||
{
|
||||
#if (NGX_STREAM_UPSTREAM_ZONE)
|
||||
ngx_stream_upstream_rr_peer_data_t *rrp = data;
|
||||
|
||||
ngx_stream_upstream_rr_peers_rlock(rrp->peers);
|
||||
ngx_stream_upstream_rr_peer_lock(rrp->peers, rrp->current);
|
||||
#endif
|
||||
|
||||
ngx_stream_upstream_free_round_robin_peer_locked(pc, data, state);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_stream_upstream_free_round_robin_peer_locked(ngx_peer_connection_t *pc,
|
||||
void *data, ngx_uint_t state)
|
||||
{
|
||||
ngx_stream_upstream_rr_peer_data_t *rrp = data;
|
||||
|
||||
|
|
@ -802,9 +817,6 @@ ngx_stream_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, void *data,
|
|||
|
||||
peer = rrp->current;
|
||||
|
||||
ngx_stream_upstream_rr_peers_rlock(rrp->peers);
|
||||
ngx_stream_upstream_rr_peer_lock(rrp->peers, peer);
|
||||
|
||||
if (rrp->peers->single) {
|
||||
|
||||
if (peer->fails) {
|
||||
|
|
|
|||
|
|
@ -227,6 +227,8 @@ ngx_int_t ngx_stream_upstream_get_round_robin_peer(ngx_peer_connection_t *pc,
|
|||
void *data);
|
||||
void ngx_stream_upstream_free_round_robin_peer(ngx_peer_connection_t *pc,
|
||||
void *data, ngx_uint_t state);
|
||||
void ngx_stream_upstream_free_round_robin_peer_locked(ngx_peer_connection_t *pc,
|
||||
void *data, ngx_uint_t state);
|
||||
|
||||
|
||||
#endif /* _NGX_STREAM_UPSTREAM_ROUND_ROBIN_H_INCLUDED_ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue