keep errno in out of memory situations (#19984)
Costa Tsaousis committed
Mar 27, 2025 at 15:23 UTC
26e350920cc6bea615b15b0c2d64ad7542b6bff1
2 files changed
+4
src/libnetdata/memory/nd-mallocz.c
+2
@@ -23,6 +23,7 @@ uint64_t process_max_rss(void) {
23
24
ALWAYS_INLINE NORETURN
25
void out_of_memory(const char *call, size_t size, const char *details) {
26
+ int errno_saved = errno;
27
exit_initiated_add(EXIT_REASON_OUT_OF_MEMORY);
28
29
if(out_of_memory_callback)
@@ -37,6 +38,7 @@ void out_of_memory(const char *call, size_t size, const char *details) {
38
size_snprintf(mem_available, sizeof(mem_available), sm.ram_available_bytes, "B", false);
39
size_snprintf(rss_used, sizeof(rss_used), max_rss, "B", false);
40
41
+ errno = errno_saved;
42
fatal("Out of memory on %s(%zu bytes)!\n"
43
"System memory available: %s, while our max RSS usage is: %s\n"
44
"O/S mmap limit: %llu, while our mmap count is: %zu\n"
src/libnetdata/memory/nd-mmap.c
+2
@@ -183,6 +183,8 @@ void *nd_mmap_advanced(const char *filename, size_t size, int flags, int ksm, bo
183
int fd = -1;
184
void *mem = MAP_FAILED;
185
186
+ errno_clear();
187
+
188
if(filename && *filename) {
189
// open/create the file to be used
190
fd = memory_file_open(filename, size);