]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: init: only keep rlim_fd_cur if max is unlimited
authorWilly Tarreau <w@1wt.eu>
Tue, 13 Oct 2020 13:36:08 +0000 (15:36 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 13 Oct 2020 13:36:08 +0000 (15:36 +0200)
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.

src/haproxy.c

index 3924df1d528b30fca16e2df9ad155d1bc82ac19e..3bdcba7b82d970ffcdbf4345ec401bf17d601880 100644 (file)
@@ -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;