Add missing padding from MemoryChunk struct
authorDavid Rowley <[email protected]>
Mon, 29 Aug 2022 11:20:25 +0000 (23:20 +1200)
committerDavid Rowley <[email protected]>
Mon, 29 Aug 2022 11:20:25 +0000 (23:20 +1200)
Buildfarm animals skate, grison and mamba are Assert failing on the
pointer being given to repalloc not being MAXALIGNED.  c6e0fe1f2a made
changes in that area.

All of these animals are 32-bit with a MAXIMUM_ALIGNOF of 8 and a
SIZEOF_VOID_P of 4.  I suspect that the pointer is not properly aligned due
to the lack of padding in the MemoryChunk struct.

Here we add the same type of padding that was previously used in
AllocChunkData and GenerationChunk that c6e0fe1f2a neglected to add.

Discussion: https://postgr.es/m/CAA4eK1%2B1JyW5TiL%3DyV-3Uq1CrfnTyn0Xrk5uArt31Z%3D8rgPhXQ%40mail.gmail.com

src/include/utils/memutils_memorychunk.h

index 685c177b681ad2c3de551ace9bee999a244160d3..1e27d084cd461c06d8aabff38643895ab8f53f4d 100644 (file)
@@ -111,6 +111,14 @@ typedef struct MemoryChunk
 {
 #ifdef MEMORY_CONTEXT_CHECKING
        Size            requested_size;
+#define MEMORYCHUNK_RAWSIZE            (SIZEOF_SIZE_T + 8)
+#else
+#define MEMORYCHUNK_RAWSIZE            8
+#endif                                                 /* MEMORY_CONTEXT_CHECKING */
+
+       /* ensure proper alignment by adding padding if needed */
+#if (MEMORYCHUNK_RAWSIZE % MAXIMUM_ALIGNOF) != 0
+       char            padding[MAXIMUM_ALIGNOF - MEMORYCHUNK_RAWSIZE % MAXIMUM_ALIGNOF];
 #endif
 
        /* bitfield for storing details about the chunk */