From: David Rowley Date: Thu, 17 Apr 2025 21:04:28 +0000 (+1200) Subject: Make levels 1-based in pg_log_backend_memory_contexts() X-Git-Tag: REL_18_BETA1~129 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=d9e03864b6b;p=postgresql.git Make levels 1-based in pg_log_backend_memory_contexts() Both pg_get_process_memory_contexts() and pg_backend_memory_contexts have 1-based levels, whereas pg_log_backend_memory_contexts() was using 0-based levels. Align these. This results in slightly saner behavior from MemoryContextStatsDetail() in regards to the max_level. Previously it would stop at 1 level before the maximum requested level rather than at that level. Reported-by: Atsushi Torikoshi Author: Atsushi Torikoshi Author: David Rowley Reviewed-by: Rahila Syed Discussion: https://postgr.es/m/395ea5d4fe190480efa95bf533485c70@oss.nttdata.com --- diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index 1f5ebf2e124..e9aab36d110 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -873,7 +873,7 @@ MemoryContextStatsDetail(MemoryContext context, print_location = PRINT_STATS_TO_LOGS; /* num_contexts report number of contexts aggregated in the output */ - MemoryContextStatsInternal(context, 0, max_level, max_children, + MemoryContextStatsInternal(context, 1, max_level, max_children, &grand_totals, print_location, &num_contexts); if (print_to_stderr) @@ -968,7 +968,7 @@ MemoryContextStatsInternal(MemoryContext context, int level, */ child = context->firstchild; ichild = 0; - if (level < max_level && !stack_is_too_deep()) + if (level <= max_level && !stack_is_too_deep()) { for (; child != NULL && ichild < max_children; child = child->nextchild, ichild++) @@ -1003,7 +1003,7 @@ MemoryContextStatsInternal(MemoryContext context, int level, if (print_location == PRINT_STATS_TO_STDERR) { - for (int i = 0; i <= level; i++) + for (int i = 0; i < level; i++) fprintf(stderr, " "); fprintf(stderr, "%d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used\n", @@ -1104,7 +1104,7 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru, if (print_to_stderr) { - for (i = 0; i < level; i++) + for (i = 1; i < level; i++) fprintf(stderr, " "); fprintf(stderr, "%s: %s%s\n", name, stats_string, truncated_ident); } @@ -1585,12 +1585,11 @@ ProcessGetMemoryContextInterrupt(void) { MemoryContextCounters grand_totals; int num_contexts = 0; - int level = 0; path = NIL; memset(&grand_totals, 0, sizeof(grand_totals)); - MemoryContextStatsInternal(c, level, 100, 100, &grand_totals, + MemoryContextStatsInternal(c, 1, 100, 100, &grand_totals, PRINT_STATS_NONE, &num_contexts); path = compute_context_path(c, context_id_lookup);