mirror of
https://github.com/postgres/postgres.git
synced 2025-05-06 19:59:18 +03:00
Add macro to cast away volatile without allowing changes to underlying type
This adds unvolatize(), which works just like unconstify() but for volatile. Discussion: https://www.postgresql.org/message-id/flat/7a5cbea7-b8df-e910-0f10-04014bcad701%402ndquadrant.com
This commit is contained in:
parent
572e3e6634
commit
481018f280
@ -3311,7 +3311,7 @@ pgstat_read_current_status(void)
|
||||
localentry->backendStatus.st_procpid = beentry->st_procpid;
|
||||
if (localentry->backendStatus.st_procpid > 0)
|
||||
{
|
||||
memcpy(&localentry->backendStatus, (char *) beentry, sizeof(PgBackendStatus));
|
||||
memcpy(&localentry->backendStatus, unvolatize(PgBackendStatus *, beentry), sizeof(PgBackendStatus));
|
||||
|
||||
/*
|
||||
* strcpy is safe even if the string is modified concurrently,
|
||||
|
@ -134,7 +134,7 @@ PMSignalShmemInit(void)
|
||||
|
||||
if (!found)
|
||||
{
|
||||
MemSet(PMSignalState, 0, PMSignalShmemSize());
|
||||
MemSet(unvolatize(PMSignalData *, PMSignalState), 0, PMSignalShmemSize());
|
||||
PMSignalState->num_child_flags = MaxLivePostmasterChildren();
|
||||
}
|
||||
}
|
||||
|
@ -1122,7 +1122,7 @@ typedef union PGAlignedXLogBlock
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Macro that allows to cast constness away from an expression, but doesn't
|
||||
* Macro that allows to cast constness and volatile away from an expression, but doesn't
|
||||
* allow changing the underlying type. Enforcement of the latter
|
||||
* currently only works for gcc like compilers.
|
||||
*
|
||||
@ -1141,9 +1141,15 @@ typedef union PGAlignedXLogBlock
|
||||
(StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), const underlying_type), \
|
||||
"wrong cast"), \
|
||||
(underlying_type) (expr))
|
||||
#define unvolatize(underlying_type, expr) \
|
||||
(StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), volatile underlying_type), \
|
||||
"wrong cast"), \
|
||||
(underlying_type) (expr))
|
||||
#else
|
||||
#define unconstify(underlying_type, expr) \
|
||||
((underlying_type) (expr))
|
||||
#define unvolatize(underlying_type, expr) \
|
||||
((underlying_type) (expr))
|
||||
#endif
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user