diff options
author | David Rowley | 2025-04-17 21:04:28 +0000 |
---|---|---|
committer | David Rowley | 2025-04-17 21:04:28 +0000 |
commit | d9e03864b6b4c7fe2988393c22e2355786c4c1f7 (patch) | |
tree | bdc6998fe23f76c7764f97fd2f48d758bc3c81e9 | |
parent | fc5e966f73f06ab2b3e7fa488fc2712d77639947 (diff) |
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 <[email protected]>
Author: Atsushi Torikoshi <[email protected]>
Author: David Rowley <[email protected]
Reviewed-by: Melih Mutlu <[email protected]>
Reviewed-by: Rahila Syed <[email protected]>
Discussion: https://postgr.es/m/[email protected]
-rw-r--r-- | src/backend/utils/mmgr/mcxt.c | 11 |
1 files changed, 5 insertions, 6 deletions
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); |