From: Peter Eisentraut Date: Mon, 16 Mar 2026 09:41:38 +0000 (+0100) Subject: Use C11 alignas in typedef definitions X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=5c2a8d272b9aa95f36355357095a2838120b0fe2;p=thirdparty%2Fpostgresql.git 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 Author: Bertrand Drouvot Discussion: https://postgr.es/m/d7a788fa-e609-4894-a8be-2f70e135424f%40eisentraut.org --- diff --git a/src/backend/storage/aio/method_io_uring.c b/src/backend/storage/aio/method_io_uring.c index ed6e71bcd46..4867ded35ea 100644 --- a/src/backend/storage/aio/method_io_uring.c +++ b/src/backend/storage/aio/method_io_uring.c @@ -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 diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h index 3f89450c216..bf3094f0f7d 100644 --- a/src/include/storage/proc.h +++ b/src/include/storage/proc.h @@ -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;