From 3d059655be7dfcb7124c6b3ce0925448de89f669 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
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 */
-- 
GitLab