From: Willy Tarreau Date: Tue, 13 Oct 2020 13:36:08 +0000 (+0200) Subject: BUG/MINOR: init: only keep rlim_fd_cur if max is unlimited X-Git-Tag: v2.3-dev7~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2bd0f8147b0682ec962f59a5c38f03314f43a4f5;p=thirdparty%2Fhaproxy.git BUG/MINOR: init: only keep rlim_fd_cur if max is unlimited On some operating systems, RLIM_INFINITY is set to -1 so that when the hard limit on the number of FDs is set to unlimited, taking the MAX of both values keeps rlim_fd_cur and everything works. But on other systems this values is defined as the highest positive integer. This is what was observed on a 32-bit AIX 5.1. The effect is that maxsock becomes 2^31-1 and that fdtab allocation fails. Note that a simple workaround consists in manually setting maxconn in the global section. Let's ignore unlimited as soon as we retrieve rlim_fd_max so that all systems behave consistently. This may be backported as far as 2.0, though it doesn't seem like it has annoyed anyone. --- diff --git a/src/haproxy.c b/src/haproxy.c index 3924df1d52..3bdcba7b82 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -3055,6 +3055,9 @@ int main(int argc, char **argv) /* take a copy of initial limits before we possibly change them */ getrlimit(RLIMIT_NOFILE, &limit); + + if (limit.rlim_max == RLIM_INFINITY) + limit.rlim_max = limit.rlim_cur; rlim_fd_cur_at_boot = limit.rlim_cur; rlim_fd_max_at_boot = limit.rlim_max;