Fix some poor decisions about sizing of trigger-related memory contexts.

This commit is contained in:
Tom Lane 2001-08-02 15:59:28 +00:00
parent 84d2c518fe
commit ecaa2e01b7
1 changed files with 10 additions and 7 deletions

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.93 2001/06/22 19:16:21 wieck Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.94 2001/08/02 15:59:28 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -1499,7 +1499,7 @@ deferredTriggerInvokeEvents(bool immediate_only)
per_tuple_context =
AllocSetContextCreate(CurrentMemoryContext,
"DeferredTriggerTupleContext",
0,
ALLOCSET_DEFAULT_MINSIZE,
ALLOCSET_DEFAULT_INITSIZE,
ALLOCSET_DEFAULT_MAXSIZE);
@ -1594,9 +1594,13 @@ deferredTriggerInvokeEvents(bool immediate_only)
void
DeferredTriggerInit(void)
{
/*
* Since this context will never be reset, give it a minsize of 0.
* This avoids using any memory if the session never stores anything.
*/
deftrig_gcxt = AllocSetContextCreate(TopMemoryContext,
"DeferredTriggerSession",
ALLOCSET_DEFAULT_MINSIZE,
0,
ALLOCSET_DEFAULT_INITSIZE,
ALLOCSET_DEFAULT_MAXSIZE);
}
@ -1623,11 +1627,12 @@ DeferredTriggerBeginXact(void)
/*
* Create the per transaction memory context and copy all states from
* the per session context to here.
* the per session context to here. Set the minsize to 0 to avoid
* wasting memory if there is no deferred trigger data.
*/
deftrig_cxt = AllocSetContextCreate(TopTransactionContext,
"DeferredTriggerXact",
ALLOCSET_DEFAULT_MINSIZE,
0,
ALLOCSET_DEFAULT_INITSIZE,
ALLOCSET_DEFAULT_MAXSIZE);
oldcxt = MemoryContextSwitchTo(deftrig_cxt);
@ -1911,7 +1916,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
if (!IsTransactionBlock())
{
/*
* Outside of a transaction block set the trigger states of
* individual triggers on session level.
@ -1949,7 +1953,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
}
else
{
/*
* Inside of a transaction block set the trigger states of
* individual triggers on transaction level.