mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
Simplify use of AllocSetContextCreate() wrapper macro.
We can allow this macro to accept either abbreviated or non-abbreviated allocation parameters by making use of __VA_ARGS__. As noted by Andres Freund, it's unlikely that any compiler would have __builtin_constant_p but not __VA_ARGS__, so this gives up little or no error checking, and it avoids a minor but annoying API break for extensions. With this change, there is no reason for anybody to call AllocSetContextCreateExtended directly, so in HEAD I renamed it to AllocSetContextCreateInternal. It's probably too late for an ABI break like that in 11, though. Discussion: https://postgr.es/m/20181012170355.bhxi273skjt6sag4@alap3.anarazel.de
This commit is contained in:
parent
355684ee3f
commit
3d059655be
@ -1018,11 +1018,11 @@ AtStart_Memory(void)
|
||||
*/
|
||||
if (TransactionAbortContext == NULL)
|
||||
TransactionAbortContext =
|
||||
AllocSetContextCreateExtended(TopMemoryContext,
|
||||
"TransactionAbortContext",
|
||||
32 * 1024,
|
||||
32 * 1024,
|
||||
32 * 1024);
|
||||
AllocSetContextCreate(TopMemoryContext,
|
||||
"TransactionAbortContext",
|
||||
32 * 1024,
|
||||
32 * 1024,
|
||||
32 * 1024);
|
||||
|
||||
/*
|
||||
* We shouldn't have a transaction context already.
|
||||
|
@ -381,8 +381,10 @@ AllocSetFreeIndex(Size size)
|
||||
* maxBlockSize: maximum allocation block size
|
||||
*
|
||||
* Most callers should abstract the context size parameters using a macro
|
||||
* such as ALLOCSET_DEFAULT_SIZES. (This is now *required* when going
|
||||
* through the AllocSetContextCreate macro.)
|
||||
* such as ALLOCSET_DEFAULT_SIZES.
|
||||
*
|
||||
* Note: don't call this directly; go through the wrapper macro
|
||||
* AllocSetContextCreate.
|
||||
*/
|
||||
MemoryContext
|
||||
AllocSetContextCreateExtended(MemoryContext parent,
|
||||
|
@ -119,11 +119,11 @@ MemoryContextInit(void)
|
||||
* This should be the last step in this function, as elog.c assumes memory
|
||||
* management works once ErrorContext is non-null.
|
||||
*/
|
||||
ErrorContext = AllocSetContextCreateExtended(TopMemoryContext,
|
||||
"ErrorContext",
|
||||
8 * 1024,
|
||||
8 * 1024,
|
||||
8 * 1024);
|
||||
ErrorContext = AllocSetContextCreate(TopMemoryContext,
|
||||
"ErrorContext",
|
||||
8 * 1024,
|
||||
8 * 1024,
|
||||
8 * 1024);
|
||||
MemoryContextAllowInCriticalSection(ErrorContext, true);
|
||||
}
|
||||
|
||||
|
@ -158,17 +158,16 @@ extern MemoryContext AllocSetContextCreateExtended(MemoryContext parent,
|
||||
/*
|
||||
* This wrapper macro exists to check for non-constant strings used as context
|
||||
* names; that's no longer supported. (Use MemoryContextSetIdentifier if you
|
||||
* want to provide a variable identifier.) Note you must specify block sizes
|
||||
* with one of the abstraction macros below.
|
||||
* want to provide a variable identifier.)
|
||||
*/
|
||||
#ifdef HAVE__BUILTIN_CONSTANT_P
|
||||
#define AllocSetContextCreate(parent, name, allocparams) \
|
||||
#if defined(HAVE__BUILTIN_CONSTANT_P) && defined(HAVE__VA_ARGS)
|
||||
#define AllocSetContextCreate(parent, name, ...) \
|
||||
(StaticAssertExpr(__builtin_constant_p(name), \
|
||||
"memory context names must be constant strings"), \
|
||||
AllocSetContextCreateExtended(parent, name, allocparams))
|
||||
AllocSetContextCreateExtended(parent, name, __VA_ARGS__))
|
||||
#else
|
||||
#define AllocSetContextCreate(parent, name, allocparams) \
|
||||
AllocSetContextCreateExtended(parent, name, allocparams)
|
||||
#define AllocSetContextCreate \
|
||||
AllocSetContextCreateExtended
|
||||
#endif
|
||||
|
||||
/* slab.c */
|
||||
|
Loading…
x
Reference in New Issue
Block a user