1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Repair incorrect cleanup of heap memory allocation during

transaction abort --- before it only worked if there was exactly one level
of allocation context stacked in the blank portal.  Now it does the right
thing for any depth, including zero...
This commit is contained in:
Tom Lane
1999-09-09 16:25:35 +00:00
parent 8b8db01517
commit 5bc0d31ae8
3 changed files with 9 additions and 21 deletions

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.50 1999/09/05 17:12:34 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.51 1999/09/09 16:25:35 tgl Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
@ -694,19 +694,13 @@ static void
AtCommit_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 probably not necessary, but seems like a good idea...)
* Release all heap memory in the blank portal.
* ----------------
*/
portal = GetPortalByName(NULL);
portalContext = (MemoryContext) PortalGetHeapMemory(portal);
MemoryContextSwitchTo(portalContext);
EndPortalAllocMode();
PortalResetHeapMemory(portal);
/* ----------------
* Now that we're "out" of a transaction, have the
@ -784,19 +778,13 @@ static void
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.)
* Release all heap memory in the blank portal.
* ----------------
*/
portal = GetPortalByName(NULL);
portalContext = (MemoryContext) PortalGetHeapMemory(portal);
MemoryContextSwitchTo(portalContext);
EndPortalAllocMode();
PortalResetHeapMemory(portal);
/* ----------------
* Now that we're "out" of a transaction, have the