From 665dde648177f8251638318a95d09a87fbdcc7ae Mon Sep 17 00:00:00 2001 From: Valentine Krasnobaeva Date: Fri, 12 Jul 2024 17:55:15 +0200 Subject: [PATCH] MINOR: debug: use LIM2A to show limits It is more handy to use LIM2A in debug_parse_cli_show_dev(), as it allows to show a custom string ("unlimited"), if a given limit value equals to 0. normalize_rlim() handler is needed to convert properly RLIM_INFINITY to zero, with the respect of type sizes, as rlim_t is always 4 bytes on 32bit and 64bit arch. --- include/haproxy/limits.h | 13 +++++++++++++ src/debug.c | 17 +++++++++-------- src/limits.c | 1 - 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/include/haproxy/limits.h b/include/haproxy/limits.h index 51e03e66a3..0b1e844018 100644 --- a/include/haproxy/limits.h +++ b/include/haproxy/limits.h @@ -8,10 +8,23 @@ #ifndef _HAPROXY_LIMITS_H #define _HAPROXY_LIMITS_H #include +#include extern unsigned int rlim_fd_cur_at_boot; extern unsigned int rlim_fd_max_at_boot; +/* returns 0 if the given limit was not set (reported as infinity), otherwise + * returns the limit, useful to print limit values as strings in err messages + * via LIM2A macros. + */ +static inline ulong normalize_rlim(ulong rlim) +{ + if (rlim == RLIM_INFINITY) + return 0; + + return rlim; +} + /* handlers to compute internal process limits, if they are not provided via * cmd line or via configuration file. */ diff --git a/src/debug.c b/src/debug.c index 4526d60402..79ace2ae34 100644 --- a/src/debug.c +++ b/src/debug.c @@ -38,6 +38,7 @@ #include #include #include +#include #if defined(USE_LINUX_CAP) #include #endif @@ -605,14 +606,14 @@ static int debug_parse_cli_show_dev(char **args, char *payload, struct appctx *a chunk_appendf(&trash, " capget() failed at runtime with: %s.\n", strerror(post_mortem.process.caps.err_run)); #endif - if ((ulong)post_mortem.process.limit_fd.rlim_cur != RLIM_INFINITY) - chunk_appendf(&trash, " fd limit (soft): %lu\n", (ulong)post_mortem.process.limit_fd.rlim_cur); - if ((ulong)post_mortem.process.limit_fd.rlim_max != RLIM_INFINITY) - chunk_appendf(&trash, " fd limit (hard): %lu\n", (ulong)post_mortem.process.limit_fd.rlim_max); - if ((ulong)post_mortem.process.limit_ram.rlim_cur != RLIM_INFINITY) - chunk_appendf(&trash, " ram limit (soft): %lu\n", (ulong)post_mortem.process.limit_ram.rlim_cur); - if ((ulong)post_mortem.process.limit_ram.rlim_max != RLIM_INFINITY) - chunk_appendf(&trash, " ram limit (hard): %lu\n", (ulong)post_mortem.process.limit_ram.rlim_max); + chunk_appendf(&trash, " fd limit (soft): %s\n", + LIM2A(normalize_rlim((ulong)post_mortem.process.limit_fd.rlim_cur), "unlimited")); + chunk_appendf(&trash, " fd limit (hard): %s\n", + LIM2A(normalize_rlim((ulong)post_mortem.process.limit_fd.rlim_max), "unlimited")); + chunk_appendf(&trash, " ram limit (soft): %s\n", + LIM2A(normalize_rlim((ulong)post_mortem.process.limit_ram.rlim_cur), "unlimited")); + chunk_appendf(&trash, " ram limit (hard): %s\n", + LIM2A(normalize_rlim((ulong)post_mortem.process.limit_ram.rlim_max), "unlimited")); return cli_msg(appctx, LOG_INFO, trash.area); } diff --git a/src/limits.c b/src/limits.c index c5b4820c64..bb74510601 100644 --- a/src/limits.c +++ b/src/limits.c @@ -5,7 +5,6 @@ * */ -#include #include #include #include -- 2.39.5