Commit 0f7c49e8 authored by Peter Eisentraut's avatar Peter Eisentraut

Update portal-related memory context names and API

Rename PortalMemory to TopPortalContext, to avoid confusion with
PortalContext and align naming with similar top-level memory contexts.

Rename PortalData's "heap" field to portalContext.  The "heap" naming
seems quite antiquated and confusing.  Also get rid of the
PortalGetHeapMemory() macro and access the field directly, which we do
for other portal fields, so this abstraction doesn't buy anything.
Reviewed-by: default avatarAndrew Dunstan <andrew.dunstan@2ndquadrant.com>
Reviewed-by: default avatarAlvaro Herrera <alvherre@alvh.no-ip.org>
parent 3cb1b2a8
......@@ -96,7 +96,7 @@ PerformCursorOpen(DeclareCursorStmt *cstmt, ParamListInfo params,
*/
portal = CreatePortal(cstmt->portalname, false, false);
oldContext = MemoryContextSwitchTo(PortalGetHeapMemory(portal));
oldContext = MemoryContextSwitchTo(portal->portalContext);
plan = copyObject(plan);
......@@ -363,7 +363,7 @@ PersistHoldablePortal(Portal portal)
ActivePortal = portal;
if (portal->resowner)
CurrentResourceOwner = portal->resowner;
PortalContext = PortalGetHeapMemory(portal);
PortalContext = portal->portalContext;
MemoryContextSwitchTo(PortalContext);
......@@ -450,10 +450,10 @@ PersistHoldablePortal(Portal portal)
PopActiveSnapshot();
/*
* We can now release any subsidiary memory of the portal's heap context;
* We can now release any subsidiary memory of the portal's context;
* we'll never use it again. The executor already dropped its context,
* but this will clean up anything that glommed onto the portal's heap via
* but this will clean up anything that glommed onto the portal's context via
* PortalContext.
*/
MemoryContextDeleteChildren(PortalGetHeapMemory(portal));
MemoryContextDeleteChildren(portal->portalContext);
}
......@@ -239,7 +239,7 @@ ExecuteQuery(ExecuteStmt *stmt, IntoClause *intoClause,
portal->visible = false;
/* Copy the plan's saved query string into the portal's memory */
query_string = MemoryContextStrdup(PortalGetHeapMemory(portal),
query_string = MemoryContextStrdup(portal->portalContext,
entry->plansource->query_string);
/* Replan if needed, and increment plan refcount for portal */
......
......@@ -1183,7 +1183,7 @@ SPI_cursor_open_internal(const char *name, SPIPlanPtr plan,
}
/* Copy the plan's query string into the portal */
query_string = MemoryContextStrdup(PortalGetHeapMemory(portal),
query_string = MemoryContextStrdup(portal->portalContext,
plansource->query_string);
/*
......@@ -1213,7 +1213,7 @@ SPI_cursor_open_internal(const char *name, SPIPlanPtr plan,
* will result in leaking our refcount on the plan, but it doesn't
* matter because the plan is unsaved and hence transient anyway.
*/
oldcontext = MemoryContextSwitchTo(PortalGetHeapMemory(portal));
oldcontext = MemoryContextSwitchTo(portal->portalContext);
stmt_list = copyObject(stmt_list);
MemoryContextSwitchTo(oldcontext);
ReleaseCachedPlan(cplan, false);
......@@ -1311,7 +1311,7 @@ SPI_cursor_open_internal(const char *name, SPIPlanPtr plan,
*/
if (paramLI)
{
oldcontext = MemoryContextSwitchTo(PortalGetHeapMemory(portal));
oldcontext = MemoryContextSwitchTo(portal->portalContext);
paramLI = copyParamList(paramLI);
MemoryContextSwitchTo(oldcontext);
}
......
......@@ -1608,7 +1608,7 @@ exec_bind_message(StringInfo input_message)
* don't want a failure to occur between GetCachedPlan and
* PortalDefineQuery; that would result in leaking our plancache refcount.
*/
oldContext = MemoryContextSwitchTo(PortalGetHeapMemory(portal));
oldContext = MemoryContextSwitchTo(portal->portalContext);
/* Copy the plan's query string into the portal */
query_string = pstrdup(psrc->query_string);
......
......@@ -466,9 +466,9 @@ PortalStart(Portal portal, ParamListInfo params,
ActivePortal = portal;
if (portal->resowner)
CurrentResourceOwner = portal->resowner;
PortalContext = PortalGetHeapMemory(portal);
PortalContext = portal->portalContext;
oldContext = MemoryContextSwitchTo(PortalGetHeapMemory(portal));
oldContext = MemoryContextSwitchTo(PortalContext);
/* Must remember portal param list, if any */
portal->portalParams = params;
......@@ -634,7 +634,7 @@ PortalSetResultFormat(Portal portal, int nFormats, int16 *formats)
return;
natts = portal->tupDesc->natts;
portal->formats = (int16 *)
MemoryContextAlloc(PortalGetHeapMemory(portal),
MemoryContextAlloc(portal->portalContext,
natts * sizeof(int16));
if (nFormats > 1)
{
......@@ -748,7 +748,7 @@ PortalRun(Portal portal, long count, bool isTopLevel, bool run_once,
ActivePortal = portal;
if (portal->resowner)
CurrentResourceOwner = portal->resowner;
PortalContext = PortalGetHeapMemory(portal);
PortalContext = portal->portalContext;
MemoryContextSwitchTo(PortalContext);
......@@ -1184,7 +1184,7 @@ PortalRunUtility(Portal portal, PlannedStmt *pstmt,
completionTag);
/* Some utility statements may change context on us */
MemoryContextSwitchTo(PortalGetHeapMemory(portal));
MemoryContextSwitchTo(portal->portalContext);
/*
* Some utility commands may pop the ActiveSnapshot stack from under us,
......@@ -1343,9 +1343,9 @@ PortalRunMulti(Portal portal,
/*
* Clear subsidiary contexts to recover temporary memory.
*/
Assert(PortalGetHeapMemory(portal) == CurrentMemoryContext);
Assert(portal->portalContext == CurrentMemoryContext);
MemoryContextDeleteChildren(PortalGetHeapMemory(portal));
MemoryContextDeleteChildren(portal->portalContext);
}
/* Pop the snapshot if we pushed one. */
......@@ -1424,7 +1424,7 @@ PortalRunFetch(Portal portal,
ActivePortal = portal;
if (portal->resowner)
CurrentResourceOwner = portal->resowner;
PortalContext = PortalGetHeapMemory(portal);
PortalContext = portal->portalContext;
oldContext = MemoryContextSwitchTo(PortalContext);
......
......@@ -87,7 +87,7 @@ do { \
elog(WARNING, "trying to delete portal name that does not exist"); \
} while(0)
static MemoryContext PortalMemory = NULL;
static MemoryContext TopPortalContext = NULL;
/* ----------------------------------------------------------------
......@@ -104,10 +104,10 @@ EnablePortalManager(void)
{
HASHCTL ctl;
Assert(PortalMemory == NULL);
Assert(TopPortalContext == NULL);
PortalMemory = AllocSetContextCreate(TopMemoryContext,
"PortalMemory",
TopPortalContext = AllocSetContextCreate(TopMemoryContext,
"TopPortalContext",
ALLOCSET_DEFAULT_SIZES);
ctl.keysize = MAX_PORTALNAME_LEN;
......@@ -193,12 +193,12 @@ CreatePortal(const char *name, bool allowDup, bool dupSilent)
}
/* make new portal structure */
portal = (Portal) MemoryContextAllocZero(PortalMemory, sizeof *portal);
portal = (Portal) MemoryContextAllocZero(TopPortalContext, sizeof *portal);
/* initialize portal heap context; typically it won't store much */
portal->heap = AllocSetContextCreate(PortalMemory,
"PortalHeapMemory",
ALLOCSET_SMALL_SIZES);
/* initialize portal context; typically it won't store much */
portal->portalContext = AllocSetContextCreate(TopPortalContext,
"PortalContext",
ALLOCSET_SMALL_SIZES);
/* create a resource owner for the portal */
portal->resowner = ResourceOwnerCreate(CurTransactionResourceOwner,
......@@ -263,7 +263,7 @@ CreateNewPortal(void)
*
* If cplan is NULL, then it is the caller's responsibility to ensure that
* the passed plan trees have adequate lifetime. Typically this is done by
* copying them into the portal's heap context.
* copying them into the portal's context.
*
* The caller is also responsible for ensuring that the passed prepStmtName
* (if not NULL) and sourceText have adequate lifetime.
......@@ -331,10 +331,10 @@ PortalCreateHoldStore(Portal portal)
/*
* Create the memory context that is used for storage of the tuple set.
* Note this is NOT a child of the portal's heap memory.
* Note this is NOT a child of the portal's portalContext.
*/
portal->holdContext =
AllocSetContextCreate(PortalMemory,
AllocSetContextCreate(TopPortalContext,
"PortalHoldContext",
ALLOCSET_DEFAULT_SIZES);
......@@ -576,9 +576,9 @@ PortalDrop(Portal portal, bool isTopCommit)
MemoryContextDelete(portal->holdContext);
/* release subsidiary storage */
MemoryContextDelete(PortalGetHeapMemory(portal));
MemoryContextDelete(portal->portalContext);
/* release portal struct (it's in PortalMemory) */
/* release portal struct (it's in TopPortalContext) */
pfree(portal);
}
......@@ -806,7 +806,7 @@ AtAbort_Portals(void)
* The cleanup hook was the last thing that might have needed data
* there.
*/
MemoryContextDeleteChildren(PortalGetHeapMemory(portal));
MemoryContextDeleteChildren(portal->portalContext);
}
}
......@@ -1000,7 +1000,7 @@ AtSubAbort_Portals(SubTransactionId mySubid,
* The cleanup hook was the last thing that might have needed data
* there.
*/
MemoryContextDeleteChildren(PortalGetHeapMemory(portal));
MemoryContextDeleteChildren(portal->portalContext);
}
}
......
......@@ -116,7 +116,7 @@ typedef struct PortalData
/* Bookkeeping data */
const char *name; /* portal's name */
const char *prepStmtName; /* source prepared statement (NULL if none) */
MemoryContext heap; /* subsidiary memory for portal */
MemoryContext portalContext;/* subsidiary memory for portal */
ResourceOwner resowner; /* resources owned by portal */
void (*cleanup) (Portal portal); /* cleanup hook */
......@@ -202,7 +202,6 @@ typedef struct PortalData
* Access macros for Portal ... use these in preference to field access.
*/
#define PortalGetQueryDesc(portal) ((portal)->queryDesc)
#define PortalGetHeapMemory(portal) ((portal)->heap)
/* Prototypes for functions in utils/mmgr/portalmem.c */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment