From 88f626f8680fbe93444582317d1adb375111855f Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Mon, 5 Dec 2016 10:38:08 -0500 Subject: Fix more DSA problems uncovered by the buildfarm. On 32-bit systems, don't try to use 64-bit DSA pointers, because the computation of DSA_MAX_SEGMENT_SIZE overflows Size. Cast 1 to Size before shifting it, so that the compiler doesn't produce a result of the wrong width. In passing, change one use of size_t to Size. --- src/backend/utils/mmgr/dsa.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/backend/utils/mmgr/dsa.c') diff --git a/src/backend/utils/mmgr/dsa.c b/src/backend/utils/mmgr/dsa.c index 0e49e7020df..aa3ab58d38a 100644 --- a/src/backend/utils/mmgr/dsa.c +++ b/src/backend/utils/mmgr/dsa.c @@ -98,7 +98,7 @@ #define DSA_OFFSET_BITMASK (((dsa_pointer) 1 << DSA_OFFSET_WIDTH) - 1) /* The maximum size of a DSM segment. */ -#define DSA_MAX_SEGMENT_SIZE ((size_t) 1 << DSA_OFFSET_WIDTH) +#define DSA_MAX_SEGMENT_SIZE ((Size) 1 << DSA_OFFSET_WIDTH) /* Number of pages (see FPM_PAGE_SIZE) per regular superblock. */ #define DSA_PAGES_PER_SUPERBLOCK 16 @@ -1919,7 +1919,7 @@ get_best_segment(dsa_area *area, Size npages) * The minimum contiguous size that any segment in this bin should * have. We'll re-bin if we see segments with fewer. */ - Size threshold = 1 << (bin - 1); + Size threshold = (Size) 1 << (bin - 1); dsa_segment_index segment_index; /* Search this bin for a segment with enough contiguous space. */ -- cgit v1.2.3