From 3d059655be7dfcb7124c6b3ce0925448de89f669 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 12 Oct 2018 14:26:56 -0400 Subject: [PATCH] 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 --- src/backend/access/transam/xact.c | 10 +++++----- src/backend/utils/mmgr/aset.c | 6 ++++-- src/backend/utils/mmgr/mcxt.c | 10 +++++----- 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 */