From: Willy Tarreau Date: Fri, 1 Mar 2019 09:09:28 +0000 (+0100) Subject: MINOR: global: keep a copy of the initial rlim_fd_cur and rlim_fd_max values X-Git-Tag: v2.0-dev2~140 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bf6964007af28bd5ddafa7c2a543324c117ea37a;p=thirdparty%2Fhaproxy.git MINOR: global: keep a copy of the initial rlim_fd_cur and rlim_fd_max values Let's keep a copy of these initial values. They will be useful to compute automatic maxconn, as well as to restore proper limits when doing an execve() on external checks. --- diff --git a/include/types/global.h b/include/types/global.h index 503d8f9885..009814bcbb 100644 --- a/include/types/global.h +++ b/include/types/global.h @@ -222,6 +222,8 @@ extern volatile unsigned long sleeping_thread_mask; extern struct list proc_list; /* list of process in mworker mode */ extern struct mworker_proc *proc_self; /* process structure of current process */ extern int master; /* 1 if in master, 0 otherwise */ +extern unsigned int rlim_fd_cur_at_boot; +extern unsigned int rlim_fd_max_at_boot; /* bit values to go with "warned" above */ #define WARN_BLOCK_DEPRECATED 0x00000001 diff --git a/src/haproxy.c b/src/haproxy.c index 59da1fda69..62263e4823 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -220,6 +220,8 @@ static char **next_argv = NULL; struct list proc_list = LIST_HEAD_INIT(proc_list); int master = 0; /* 1 if in master, 0 if in child */ +unsigned int rlim_fd_cur_at_boot = 0; +unsigned int rlim_fd_max_at_boot = 0; struct mworker_proc *proc_self = NULL; @@ -2748,6 +2750,11 @@ int main(int argc, char **argv) exit(1); } + /* take a copy of initial limits before we possibly change them */ + getrlimit(RLIMIT_NOFILE, &limit); + rlim_fd_cur_at_boot = limit.rlim_cur; + rlim_fd_max_at_boot = limit.rlim_max; + /* process all initcalls in order of potential dependency */ RUN_INITCALLS(STG_PREPARE); RUN_INITCALLS(STG_LOCK);