summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/mmgr/portalmem.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c
index 217c6b1234b..7fe28ca15fa 100644
--- a/src/backend/utils/mmgr/portalmem.c
+++ b/src/backend/utils/mmgr/portalmem.c
@@ -12,7 +12,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/mmgr/portalmem.c,v 1.106.2.2 2009/12/29 17:41:18 heikki Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mmgr/portalmem.c,v 1.106.2.3 2010/01/18 02:30:37 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -324,6 +324,13 @@ PortalReleaseCachedPlan(Portal portal)
{
ReleaseCachedPlan(portal->cplan, false);
portal->cplan = NULL;
+
+ /*
+ * We must also clear portal->stmts which is now a dangling
+ * reference to the cached plan's plan list. This protects any
+ * code that might try to examine the Portal later.
+ */
+ portal->stmts = NIL;
}
}
@@ -385,8 +392,7 @@ PortalDrop(Portal portal, bool isTopCommit)
(*portal->cleanup) (portal);
/* drop cached plan reference, if any */
- if (portal->cplan)
- PortalReleaseCachedPlan(portal);
+ PortalReleaseCachedPlan(portal);
/*
* Release any resources still attached to the portal. There are several
@@ -519,8 +525,7 @@ CommitHoldablePortals(void)
PersistHoldablePortal(portal);
/* drop cached plan reference, if any */
- if (portal->cplan)
- PortalReleaseCachedPlan(portal);
+ PortalReleaseCachedPlan(portal);
/*
* Any resources belonging to the portal will be released in the
@@ -670,8 +675,7 @@ AtAbort_Portals(void)
}
/* drop cached plan reference, if any */
- if (portal->cplan)
- PortalReleaseCachedPlan(portal);
+ PortalReleaseCachedPlan(portal);
/*
* Any resources belonging to the portal will be released in the
@@ -813,8 +817,7 @@ AtSubAbort_Portals(SubTransactionId mySubid,
}
/* drop cached plan reference, if any */
- if (portal->cplan)
- PortalReleaseCachedPlan(portal);
+ PortalReleaseCachedPlan(portal);
/*
* Any resources belonging to the portal will be released in the