mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 20:46:11 +02:00
[MINOR] listeners: add listen_full() to mark a listener full
This is just a cleanup which removes calls to EV_FD_CLR() and state setting everywhere in the code.
This commit is contained in:
parent
ff45b8ccc6
commit
627937158f
@ -51,6 +51,11 @@ int pause_listener(struct listener *l);
|
||||
*/
|
||||
int resume_listener(struct listener *l);
|
||||
|
||||
/* Marks a ready listener as full so that the session code tries to re-enable
|
||||
* it upon next close() using resume_listener().
|
||||
*/
|
||||
void listener_full(struct listener *l);
|
||||
|
||||
/* This function adds all of the protocol's listener's file descriptors to the
|
||||
* polling lists when they are in the LI_LISTEN state. It is intended to be
|
||||
* used as a protocol's generic enable_all() primitive, for use after the
|
||||
|
||||
@ -106,6 +106,17 @@ int resume_listener(struct listener *l)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Marks a ready listener as full so that the session code tries to re-enable
|
||||
* it upon next close() using resume_listener().
|
||||
*/
|
||||
void listener_full(struct listener *l)
|
||||
{
|
||||
if (l->state >= LI_READY) {
|
||||
EV_FD_CLR(l->fd, DIR_RD);
|
||||
l->state = LI_FULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* This function adds all of the protocol's listener's file descriptors to the
|
||||
* polling lists when they are in the LI_LISTEN state. It is intended to be
|
||||
* used as a protocol's generic enable_all() primitive, for use after the
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
#include <proto/log.h>
|
||||
#include <proto/session.h>
|
||||
#include <proto/pipe.h>
|
||||
#include <proto/protocols.h>
|
||||
#include <proto/proto_http.h>
|
||||
#include <proto/proto_tcp.h>
|
||||
#include <proto/proxy.h>
|
||||
@ -2088,12 +2089,8 @@ struct task *process_session(struct task *t)
|
||||
actconn--;
|
||||
jobs--;
|
||||
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 (s->listener->state == LI_FULL)
|
||||
resume_listener(s->listener);
|
||||
|
||||
if (unlikely((global.mode & MODE_DEBUG) &&
|
||||
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
|
||||
|
||||
@ -1194,8 +1194,7 @@ int stream_sock_accept(int fd)
|
||||
int ret;
|
||||
|
||||
if (unlikely(l->nbconn >= l->maxconn)) {
|
||||
EV_FD_CLR(l->fd, DIR_RD);
|
||||
l->state = LI_FULL;
|
||||
listener_full(l);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1221,20 +1220,16 @@ int stream_sock_accept(int fd)
|
||||
send_log(p, LOG_EMERG,
|
||||
"Proxy %s reached system FD limit at %d. Please check system tunables.\n",
|
||||
p->id, maxfd);
|
||||
if (l->nbconn) {
|
||||
EV_FD_CLR(l->fd, DIR_RD);
|
||||
l->state = LI_FULL;
|
||||
}
|
||||
if (l->nbconn)
|
||||
listener_full(l);
|
||||
return 0;
|
||||
case EMFILE:
|
||||
if (p)
|
||||
send_log(p, LOG_EMERG,
|
||||
"Proxy %s reached process FD limit at %d. Please check 'ulimit-n' and restart.\n",
|
||||
p->id, maxfd);
|
||||
if (l->nbconn) {
|
||||
EV_FD_CLR(l->fd, DIR_RD);
|
||||
l->state = LI_FULL;
|
||||
}
|
||||
if (l->nbconn)
|
||||
listener_full(l);
|
||||
return 0;
|
||||
case ENOBUFS:
|
||||
case ENOMEM:
|
||||
@ -1242,10 +1237,8 @@ int stream_sock_accept(int fd)
|
||||
send_log(p, LOG_EMERG,
|
||||
"Proxy %s reached system memory limit at %d sockets. Please check system tunables.\n",
|
||||
p->id, maxfd);
|
||||
if (l->nbconn) {
|
||||
EV_FD_CLR(l->fd, DIR_RD);
|
||||
l->state = LI_FULL;
|
||||
}
|
||||
if (l->nbconn)
|
||||
listener_full(l);
|
||||
return 0;
|
||||
default:
|
||||
return 0;
|
||||
@ -1291,10 +1284,10 @@ int stream_sock_accept(int fd)
|
||||
}
|
||||
|
||||
if (l->nbconn >= l->maxconn) {
|
||||
EV_FD_CLR(l->fd, DIR_RD);
|
||||
l->state = LI_FULL;
|
||||
listener_full(l);
|
||||
return 0;
|
||||
}
|
||||
|
||||
} /* end of while (p->feconn < p->maxconn) */
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user