]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix integer underflow in shared memory debugging
authorDaniel Gustafsson <dgustafsson@postgresql.org>
Thu, 29 Feb 2024 11:19:52 +0000 (12:19 +0100)
committerDaniel Gustafsson <dgustafsson@postgresql.org>
Thu, 29 Feb 2024 11:19:52 +0000 (12:19 +0100)
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

src/backend/utils/mmgr/dsa.c

index 8d1aace40ac9350129ef6693a1e9e5a8df4aeca2..bc6c76b01f6d0e37b1664c10faefd6700c50ece0 100644 (file)
@@ -1105,9 +1105,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)
                        {