From ef6354719b150a22d22e9589f163d47b112f5b20 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 21 Jun 2016 11:48:18 +0200 Subject: [PATCH] BUG/MINOR: init: always ensure that global.rlimit_nofile matches actual limits global.rlimit_nofile contains the mxa number of file descriptors that can be allocated, except if the user is not allowed to reach this limit, where it still contains the initially requested value. It is important that this value always matches what is really configured so that it is properly reported in the stats and that we can use it later to close all FDs without wasting time closing impossible FDs. This fix may be backported to 1.6 and 1.5. --- src/haproxy.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/haproxy.c b/src/haproxy.c index c6d1505..2612e29 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1769,7 +1769,10 @@ int main(int argc, char **argv) if (global.rlimit_nofile) { limit.rlim_cur = limit.rlim_max = global.rlimit_nofile; if (setrlimit(RLIMIT_NOFILE, &limit) == -1) { - Warning("[%s.main()] Cannot raise FD limit to %d.\n", argv[0], global.rlimit_nofile); + /* try to set it to the max possible at least */ + getrlimit(RLIMIT_NOFILE, &limit); + Warning("[%s.main()] Cannot raise FD limit to %d, limit is %d.\n", argv[0], global.rlimit_nofile, (int)limit.rlim_cur); + global.rlimit_nofile = limit.rlim_cur; } } -- 1.7.10.4