This basically undoes the API changes that were performed by commit
0274286dd ("BUG/MAJOR: server: fix deadlock when changing maxconn via
agent-check") to address the deadlock issue: since process_srv_queue()
doesn't use the server lock anymore, it doesn't need the "server_locked"
argument, so let's get rid of it before it gets used again.
struct pendconn *pendconn_add(struct stream *strm);
int pendconn_dequeue(struct stream *strm);
-void process_srv_queue(struct server *s, int server_locked);
+void process_srv_queue(struct server *s);
unsigned int srv_dynamic_maxconn(const struct server *s);
int pendconn_redistribute(struct server *s);
int pendconn_grab_from_px(struct server *s);
((s->be->lbprm.algo & BE_LB_KIND) == BE_LB_KIND_RR)))) {
sess_change_server(s, NULL);
if (may_dequeue_tasks(objt_server(s->target), s->be))
- process_srv_queue(objt_server(s->target), 0);
+ process_srv_queue(objt_server(s->target));
s->flags &= ~(SF_DIRECT | SF_ASSIGNED | SF_ADDR_SET);
si->state = SI_ST_REQ;
sess_change_server(s, srv);
} else {
if (may_dequeue_tasks(conn_slot, s->be))
- process_srv_queue(conn_slot, 0);
+ process_srv_queue(conn_slot);
}
}
/* release other streams waiting for this server */
if (may_dequeue_tasks(srv, s->be))
- process_srv_queue(srv, 0);
+ process_srv_queue(srv);
return 1;
}
/* if we get here, it's because we got SRV_STATUS_OK, which also
/* release other streams waiting for this server */
sess_change_server(s, NULL);
if (may_dequeue_tasks(srv, s->be))
- process_srv_queue(srv, 0);
+ process_srv_queue(srv);
/* Failed and not retryable. */
si_shutr(si);
_HA_ATOMIC_INC(&s->be->be_counters.failed_conns);
sess_change_server(s, NULL);
if (may_dequeue_tasks(objt_server(s->target), s->be))
- process_srv_queue(objt_server(s->target), 0);
+ process_srv_queue(objt_server(s->target));
/* shutw is enough so stop a connecting socket */
si_shutw(si);
HA_ATOMIC_DEC(&__objt_server(s->target)->cur_sess);
}
if (may_dequeue_tasks(__objt_server(s->target), be))
- process_srv_queue(__objt_server(s->target), 0);
+ process_srv_queue(__objt_server(s->target));
}
s->target = NULL;
}
/* Manages a server's connection queue. This function will try to dequeue as
- * many pending streams as possible, and wake them up. <server_locked> must
- * only be set if the caller already hold the server lock.
+ * many pending streams as possible, and wake them up.
*/
-void process_srv_queue(struct server *s, int server_locked)
+void process_srv_queue(struct server *s)
{
struct proxy *p = s->proxy;
int done = 0;
sv->maxconn = v;
}
- /* server_parse_maxconn_change_request requires the server lock held.
- * Specify it to process_srv_queue to prevent a deadlock.
- */
if (may_dequeue_tasks(sv, sv->proxy))
- process_srv_queue(sv, 1);
+ process_srv_queue(sv);
return NULL;
}
_HA_ATOMIC_DEC(&__objt_server(s->target)->cur_sess);
}
if (may_dequeue_tasks(objt_server(s->target), s->be))
- process_srv_queue(objt_server(s->target), 0);
+ process_srv_queue(objt_server(s->target));
}
if (unlikely(s->srv_conn)) {
}
sess_change_server(s, NULL);
if (may_dequeue_tasks(srv, s->be))
- process_srv_queue(srv, 0);
+ process_srv_queue(srv);
}
}