Use C11 alignas in typedef definitions

They were already using pg_attribute_aligned.  This replaces that with
alignas and moves that into the required syntactic position.

Suggested-by: Peter Eisentraut <peter@eisentraut.org>
Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/d7a788fa-e609-4894-a8be-2f70e135424f%40eisentraut.org
This commit is contained in:
Peter Eisentraut 2026-03-16 10:41:38 +01:00
parent d7ad79e506
commit 5c2a8d272b
2 changed files with 12 additions and 13 deletions

View file

@ -79,13 +79,15 @@ const IoMethodOps pgaio_uring_ops = {
/*
* Per-backend state when using io_method=io_uring
*
* Align the whole struct to a cacheline boundary, to prevent false sharing
* between completion_lock and prior backend's io_uring_ring.
*/
typedef struct pg_attribute_aligned (PG_CACHE_LINE_SIZE)
PgAioUringContext
typedef struct PgAioUringContext
{
/*
* Align the whole struct to a cacheline boundary, to prevent false
* sharing between completion_lock and prior backend's io_uring_ring.
*/
alignas(PG_CACHE_LINE_SIZE)
/*
* Multiple backends can process completions for this backend's io_uring
* instance (e.g. when the backend issuing IO is busy doing something

View file

@ -180,6 +180,11 @@ typedef enum
*/
typedef struct PGPROC
{
/*
* Align the struct at cache line boundaries. This is just for
* performance, to avoid false sharing.
*/
alignas(PG_CACHE_LINE_SIZE)
dlist_head *procgloballist; /* procglobal list that owns this PGPROC */
dlist_node freeProcsLink; /* link in procgloballist, when in recycled
* state */
@ -375,14 +380,6 @@ typedef struct PGPROC
uint32 wait_event_info; /* proc's wait information */
}
/*
* If compiler understands aligned pragma, use it to align the struct at cache
* line boundaries. This is just for performance, to avoid false sharing.
*/
#if defined(pg_attribute_aligned)
pg_attribute_aligned(PG_CACHE_LINE_SIZE)
#endif
PGPROC;
extern PGDLLIMPORT PGPROC *MyProc;