|
|
- commit 1dfa4fd4be313a87f2a4861e81d0ad8ea8214223
- Author: Willy Tarreau <w@1wt.eu>
- Date: Thu Mar 14 19:10:55 2019 +0100
-
- BUG/MEDIUM: threads/fd: do not forget to take into account epoll_fd/pipes
-
- Each thread uses one epoll_fd or kqueue_fd, and a pipe (thus two FDs).
- These ones have to be accounted for in the maxsock calculation, otherwise
- we can reach maxsock before maxconn. This is difficult to observe but it
- in fact happens when a server connects back to the frontend and has checks
- enabled : the check uses its FD and serves to fill the loop. In this case
- all FDs planed for the datapath are used for this.
-
- This needs to be backported to 1.9 and 1.8.
-
- (cherry picked from commit 2c58b41c96e70f567d0f9ae876a80770630c06ee)
- Signed-off-by: Willy Tarreau <w@1wt.eu>
- (cherry picked from commit 26d110ba04cba02b337beff53a83847320e4fcdb)
- Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
-
- diff --git a/src/haproxy.c b/src/haproxy.c
- index 68367627..5c3febdd 100644
- --- a/src/haproxy.c
- +++ b/src/haproxy.c
- @@ -1828,6 +1828,9 @@ static void init(int argc, char **argv)
- global.hardmaxconn = global.maxconn; /* keep this max value */
- global.maxsock += global.maxconn * 2; /* each connection needs two sockets */
- global.maxsock += global.maxpipes * 2; /* each pipe needs two FDs */
- + global.maxsock += global.nbthread; /* one epoll_fd/kqueue_fd per thread */
- + global.maxsock += 2 * global.nbthread; /* one wake-up pipe (2 fd) per thread */
- +
- /* compute fd used by async engines */
- if (global.ssl_used_async_engines) {
- int sides = !!global.ssl_used_frontend + !!global.ssl_used_backend;
|