• Heikki Linnakangas's avatar
    Fix shm_toc.c to always return buffer-aligned memory. · ac883ac4
    Heikki Linnakangas authored
    Previously, if you passed a non-aligned size to shm_toc_create(), the
    memory returned by shm_toc_allocate() would be similarly non-aligned.
    This was exposed by commit 3cda10f4, which allocated structs containing
    a pg_atomic_uint64 field with shm_toc_allocate(). On systems with
    MAXIMUM_ALIGNOF = 4, such structs still need to be 8-bytes aligned, but
    the memory returned by shm_toc_allocate() was only 4-bytes aligned.
    
    It's quite bogus that we abuse BUFFERALIGN to align the structs for
    pg_atomic_uint64. It doesn't really have anything to do with buffers. But
    that's a separate issue.
    
    This ought to fix the buildfarm failures on 32-bit x86 systems.
    
    Discussion: https://www.postgresql.org/message-id/7e0a73a5-0df9-1859-b8ae-9acf122dc38d@iki.fi
    ac883ac4
shm_toc.c 7.64 KB