mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 15:47:01 +02:00
REORG: fd: move raise_rlim_nofile to limits
Let's move raise_rlim_nofile() from 'fd' compilation unit to 'limits', as it wraps setrlimit to change process RLIMIT_NOFILE.
This commit is contained in:
parent
1517bcb5e3
commit
3759674047
@ -82,7 +82,6 @@ ssize_t fd_write_frag_line(int fd, size_t maxlen, const struct ist pfx[], size_t
|
||||
void my_closefrom(int start);
|
||||
|
||||
struct rlimit;
|
||||
int raise_rlim_nofile(struct rlimit *old_limit, struct rlimit *new_limit);
|
||||
|
||||
int compute_poll_timeout(int next);
|
||||
void fd_leaving_poll(int wait_time, int status);
|
||||
|
@ -9,4 +9,9 @@
|
||||
#define _HAPROXY_LIMITS_H
|
||||
#include <sys/resource.h>
|
||||
|
||||
/* handlers to manipulate system resources limits granted by OS to process and
|
||||
* to tie them up with the internal process limits
|
||||
*/
|
||||
int raise_rlim_nofile(struct rlimit *old_limit, struct rlimit *new_limit);
|
||||
|
||||
#endif /* _HAPROXY_LIMITS_H */
|
||||
|
26
src/fd.c
26
src/fd.c
@ -1019,32 +1019,6 @@ void my_closefrom(int start)
|
||||
}
|
||||
#endif // defined(USE_POLL)
|
||||
|
||||
/* Sets the RLIMIT_NOFILE setting to <new_limit> and returns the previous one
|
||||
* in <old_limit> if the pointer is not NULL, even if set_rlimit() fails. The
|
||||
* two pointers may point to the same variable as the copy happens after
|
||||
* setting the new value. The value is only changed if at least one of the new
|
||||
* limits is strictly higher than the current one, otherwise returns 0 without
|
||||
* changing anything. The getrlimit() or setrlimit() syscall return value is
|
||||
* returned and errno is preserved.
|
||||
*/
|
||||
int raise_rlim_nofile(struct rlimit *old_limit, struct rlimit *new_limit)
|
||||
{
|
||||
struct rlimit limit = { };
|
||||
int ret = 0;
|
||||
|
||||
ret = getrlimit(RLIMIT_NOFILE, &limit);
|
||||
|
||||
if (ret == 0 &&
|
||||
(limit.rlim_max < new_limit->rlim_max ||
|
||||
limit.rlim_cur < new_limit->rlim_cur)) {
|
||||
ret = setrlimit(RLIMIT_NOFILE, new_limit);
|
||||
}
|
||||
|
||||
if (old_limit)
|
||||
*old_limit = limit;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Computes the bounded poll() timeout based on the next expiration timer <next>
|
||||
* by bounding it to MAX_DELAY_MS. <next> may equal TICK_ETERNITY. The pollers
|
||||
|
26
src/limits.c
26
src/limits.c
@ -11,3 +11,29 @@
|
||||
#include <haproxy/proxy.h>
|
||||
|
||||
|
||||
/* Sets the RLIMIT_NOFILE setting to <new_limit> and returns the previous one
|
||||
* in <old_limit> if the pointer is not NULL, even if set_rlimit() fails. The
|
||||
* two pointers may point to the same variable as the copy happens after
|
||||
* setting the new value. The value is only changed if at least one of the new
|
||||
* limits is strictly higher than the current one, otherwise returns 0 without
|
||||
* changing anything. The getrlimit() or setrlimit() syscall return value is
|
||||
* returned and errno is preserved.
|
||||
*/
|
||||
int raise_rlim_nofile(struct rlimit *old_limit, struct rlimit *new_limit)
|
||||
{
|
||||
struct rlimit limit = { };
|
||||
int ret = 0;
|
||||
|
||||
ret = getrlimit(RLIMIT_NOFILE, &limit);
|
||||
|
||||
if (ret == 0 &&
|
||||
(limit.rlim_max < new_limit->rlim_max ||
|
||||
limit.rlim_cur < new_limit->rlim_cur)) {
|
||||
ret = setrlimit(RLIMIT_NOFILE, new_limit);
|
||||
}
|
||||
|
||||
if (old_limit)
|
||||
*old_limit = limit;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user