Commit 0b885e23 authored by Tom Lane's avatar Tom Lane

Release allocated memory during AtAbort_Memory.

parent eb4d9f45
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.34 1999/05/09 00:52:08 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.35 1999/05/13 00:34:57 tgl Exp $
* *
* NOTES * NOTES
* Transaction aborts can now occur two ways: * Transaction aborts can now occur two ways:
...@@ -690,13 +690,27 @@ AtCommit_Locks() ...@@ -690,13 +690,27 @@ AtCommit_Locks()
static void static void
AtCommit_Memory() AtCommit_Memory()
{ {
Portal portal;
MemoryContext portalContext;
/* ---------------- /* ----------------
* now that we're "out" of a transaction, have the * Release memory in the blank portal.
* Since EndPortalAllocMode implicitly works on the current context,
* first make real sure that the blank portal is the selected context.
* (This is probably not necessary, but seems like a good idea...)
* ----------------
*/
portal = GetPortalByName(NULL);
portalContext = (MemoryContext) PortalGetHeapMemory(portal);
MemoryContextSwitchTo(portalContext);
EndPortalAllocMode();
/* ----------------
* Now that we're "out" of a transaction, have the
* system allocate things in the top memory context instead * system allocate things in the top memory context instead
* of the blank portal memory context. * of the blank portal memory context.
* ---------------- * ----------------
*/ */
EndPortalAllocMode();
MemoryContextSwitchTo(TopMemoryContext); MemoryContextSwitchTo(TopMemoryContext);
} }
...@@ -770,10 +784,25 @@ AtAbort_Locks() ...@@ -770,10 +784,25 @@ AtAbort_Locks()
static void static void
AtAbort_Memory() AtAbort_Memory()
{ {
Portal portal;
MemoryContext portalContext;
/* ----------------
* Release memory in the blank portal.
* Since EndPortalAllocMode implicitly works on the current context,
* first make real sure that the blank portal is the selected context.
* (This is ESSENTIAL in case we aborted from someplace where it wasn't.)
* ----------------
*/
portal = GetPortalByName(NULL);
portalContext = (MemoryContext) PortalGetHeapMemory(portal);
MemoryContextSwitchTo(portalContext);
EndPortalAllocMode();
/* ---------------- /* ----------------
* after doing an abort transaction, make certain the * Now that we're "out" of a transaction, have the
* system uses the top memory context rather then the * system allocate things in the top memory context instead
* portal memory context (until the next transaction). * of the blank portal memory context.
* ---------------- * ----------------
*/ */
MemoryContextSwitchTo(TopMemoryContext); MemoryContextSwitchTo(TopMemoryContext);
......
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