diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2018-10-12 14:26:56 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2018-10-12 14:26:56 -0400 |
commit | 3d059655be7dfcb7124c6b3ce0925448de89f669 (patch) | |
tree | 5fb279bb5e4182fcb92af0aaea91f4dba329c6f2 | |
parent | 355684ee3fa3001adf0de3873fddadd119773819 (diff) | |
download | postgresql-3d059655be7dfcb7124c6b3ce0925448de89f669.tar.gz postgresql-3d059655be7dfcb7124c6b3ce0925448de89f669.zip |
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
-rw-r--r-- | src/backend/access/transam/xact.c | 10 | ||||
-rw-r--r-- | src/backend/utils/mmgr/aset.c | 6 | ||||
-rw-r--r-- | src/backend/utils/mmgr/mcxt.c | 10 | ||||
-rw-r--r-- | src/include/utils/memutils.h | 13 |
4 files changed, 20 insertions, 19 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 09e7e7f9a46..9bf396e9df2 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -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. diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index e3d2c4e2faa..c4d7a499b15 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -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, diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index ebe0342f18e..22da98c19d9 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -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); } diff --git a/src/include/utils/memutils.h b/src/include/utils/memutils.h index bc5757681ba..8bbf2ed122c 100644 --- a/src/include/utils/memutils.h +++ b/src/include/utils/memutils.h @@ -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 */ |