diff options
author | Daniel Gustafsson <dgustafsson@postgresql.org> | 2024-02-29 12:19:52 +0100 |
---|---|---|
committer | Daniel Gustafsson <dgustafsson@postgresql.org> | 2024-02-29 12:19:52 +0100 |
commit | 55ea12a2827791b7fb3f30b207a122a35df951d8 (patch) | |
tree | e69f1c8a139ff51d48e1d26f6ba298bd70e23582 /src | |
parent | db8855b66f5cfd9761b1763fdc6b8d93179607df (diff) | |
download | postgresql-55ea12a2827791b7fb3f30b207a122a35df951d8.tar.gz postgresql-55ea12a2827791b7fb3f30b207a122a35df951d8.zip |
Fix integer underflow in shared memory debugging
dsa_dump would print a large negative number instead of zero for
segment bin 0. Fix by explicitly checking for underflow and add
special case for bin 0. Backpatch to all supported versions.
Author: Ian Ilyasov <ianilyasov@outlook.com>
Reviewed-by: Robert Haas <robertmhaas@gmail.com>
Discussion: https://postgr.es/m/GV1P251MB1004E0D09D117D3CECF9256ECD502@GV1P251MB1004.EURP251.PROD.OUTLOOK.COM
Backpatch-through: v12
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/mmgr/dsa.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/utils/mmgr/dsa.c b/src/backend/utils/mmgr/dsa.c index 7d0686b8eab..c3c69bd3894 100644 --- a/src/backend/utils/mmgr/dsa.c +++ b/src/backend/utils/mmgr/dsa.c @@ -1093,9 +1093,13 @@ dsa_dump(dsa_area *area) { dsa_segment_index segment_index; - fprintf(stderr, - " segment bin %zu (at least %d contiguous pages free):\n", - i, 1 << (i - 1)); + if (i == 0) + fprintf(stderr, + " segment bin %zu (no contiguous free pages):\n", i); + else + fprintf(stderr, + " segment bin %zu (at least %d contiguous pages free):\n", + i, 1 << (i - 1)); segment_index = area->control->segment_bins[i]; while (segment_index != DSA_SEGMENT_INDEX_NONE) { |