From 6f0ae65e6762889a289406cc379395b4e4645d2d Mon Sep 17 00:00:00 2001 From: Evgeny Leksikov Date: Thu, 3 Oct 2024 18:50:37 +0300 Subject: [PATCH] UCS/MEMTRACK: fix allocation on memtrack dump --- src/ucs/debug/memtrack.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ucs/debug/memtrack.c b/src/ucs/debug/memtrack.c index 973a3e44e1b..4c0c9ad4df2 100644 --- a/src/ucs/debug/memtrack.c +++ b/src/ucs/debug/memtrack.c @@ -134,9 +134,17 @@ static void ucs_memtrack_dump_internal(FILE* output_stream) return; } - /* collect all entries to one array */ - all_entries = ucs_alloca(sizeof(*all_entries) * - kh_size(&ucs_memtrack_context.entries)); + /* collect all entries to one array + * - do not use ucs_alloca() since stack may have not enough space + * - do not use ucs_malloc since it affects memtrack structures + */ + all_entries = malloc(sizeof(*all_entries) * + kh_size(&ucs_memtrack_context.entries)); + if (all_entries == NULL) { + ucs_error("cannot allocate memory to dump memtrack entries"); + return; + } + num_entries = 0; kh_foreach_value(&ucs_memtrack_context.entries, entry, { all_entries[num_entries++] = entry; @@ -158,6 +166,8 @@ static void ucs_memtrack_dump_internal(FILE* output_stream) fprintf(output_stream, UCS_MEMTRACK_FORMAT_STRING, entry->name, entry->size, entry->peak_size, entry->count, entry->peak_count); } + + free(all_entries); } static void ucs_memtrack_generate_report()