mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
[MEDIUM] session: account per-listener connections
In order to merge the unix session handling code, we have to maintain the number of per-listener connections in the session. This was only performed for unix sockets till now.
This commit is contained in:
parent
89a6313c34
commit
6e6fb2beb9
16
src/client.c
16
src/client.c
@ -108,6 +108,16 @@ int event_accept(int fd) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (l->nbconn >= l->maxconn) {
|
||||||
|
/* too many connections, we shoot this one and return.
|
||||||
|
* FIXME: it would be better to simply switch the listener's
|
||||||
|
* state to LI_FULL and disable the FD. We could re-enable
|
||||||
|
* it upon fd_delete(), but this requires all protocols to
|
||||||
|
* be switched.
|
||||||
|
*/
|
||||||
|
goto out_close;
|
||||||
|
}
|
||||||
|
|
||||||
if ((s = pool_alloc2(pool2_session)) == NULL) { /* disable this proxy for a while */
|
if ((s = pool_alloc2(pool2_session)) == NULL) { /* disable this proxy for a while */
|
||||||
Alert("out of memory in event_accept().\n");
|
Alert("out of memory in event_accept().\n");
|
||||||
EV_FD_CLR(fd, DIR_RD);
|
EV_FD_CLR(fd, DIR_RD);
|
||||||
@ -458,6 +468,12 @@ int event_accept(int fd) {
|
|||||||
*/
|
*/
|
||||||
task_wakeup(t, TASK_WOKEN_INIT);
|
task_wakeup(t, TASK_WOKEN_INIT);
|
||||||
|
|
||||||
|
l->nbconn++; /* warning! right now, it's up to the handler to decrease this */
|
||||||
|
if (l->nbconn >= l->maxconn) {
|
||||||
|
EV_FD_CLR(l->fd, DIR_RD);
|
||||||
|
l->state = LI_FULL;
|
||||||
|
}
|
||||||
|
|
||||||
p->feconn++; /* beconn will be increased later */
|
p->feconn++; /* beconn will be increased later */
|
||||||
if (p->feconn > p->feconn_max)
|
if (p->feconn > p->feconn_max)
|
||||||
p->feconn_max = p->feconn;
|
p->feconn_max = p->feconn;
|
||||||
|
@ -1206,6 +1206,13 @@ resync_stream_interface:
|
|||||||
if (s->flags & SN_BE_ASSIGNED)
|
if (s->flags & SN_BE_ASSIGNED)
|
||||||
s->be->beconn--;
|
s->be->beconn--;
|
||||||
actconn--;
|
actconn--;
|
||||||
|
s->listener->nbconn--;
|
||||||
|
if (s->listener->state == LI_FULL &&
|
||||||
|
s->listener->nbconn < s->listener->maxconn) {
|
||||||
|
/* we should reactivate the listener */
|
||||||
|
EV_FD_SET(s->listener->fd, DIR_RD);
|
||||||
|
s->listener->state = LI_READY;
|
||||||
|
}
|
||||||
|
|
||||||
if (unlikely((global.mode & MODE_DEBUG) &&
|
if (unlikely((global.mode & MODE_DEBUG) &&
|
||||||
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
|
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user