From 8759b79d0fe8b9937b7cbebfed78480b3e6a94b2 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu, 20 Mar 2008 20:05:56 +0000
Subject: [PATCH] Add a couple of missing FreeQueryDesc calls.  Noticed while
 testing a framework to keep track of snapshots in use.

---
 src/backend/commands/portalcmds.c | 4 +++-
 src/backend/executor/spi.c        | 6 ++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c
index 6efd09c44b1..c876f76d920 100644
--- a/src/backend/commands/portalcmds.c
+++ b/src/backend/commands/portalcmds.c
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/commands/portalcmds.c,v 1.69 2008/01/01 19:45:49 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/commands/portalcmds.c,v 1.70 2008/03/20 20:05:56 alvherre Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -262,6 +262,7 @@ PortalCleanup(Portal portal)
 				CurrentResourceOwner = portal->resowner;
 				/* we do not need AfterTriggerEndQuery() here */
 				ExecutorEnd(queryDesc);
+				FreeQueryDesc(queryDesc);
 			}
 			PG_CATCH();
 			{
@@ -362,6 +363,7 @@ PersistHoldablePortal(Portal portal)
 		portal->queryDesc = NULL;		/* prevent double shutdown */
 		/* we do not need AfterTriggerEndQuery() here */
 		ExecutorEnd(queryDesc);
+		FreeQueryDesc(queryDesc);
 
 		/*
 		 * Set the position in the result set: ideally, this could be
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index a23c4d017a8..b7357918164 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.188 2008/02/12 04:09:44 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.189 2008/03/20 20:05:56 alvherre Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1541,7 +1541,6 @@ _SPI_execute_plan(SPIPlanPtr plan, Datum *Values, const char *Nulls,
 			{
 				Node	   *stmt = (Node *) lfirst(lc2);
 				bool		canSetTag;
-				QueryDesc  *qdesc;
 				DestReceiver *dest;
 
 				_SPI_current->processed = 0;
@@ -1617,6 +1616,8 @@ _SPI_execute_plan(SPIPlanPtr plan, Datum *Values, const char *Nulls,
 				if (IsA(stmt, PlannedStmt) &&
 					((PlannedStmt *) stmt)->utilityStmt == NULL)
 				{
+					QueryDesc  *qdesc;
+
 					qdesc = CreateQueryDesc((PlannedStmt *) stmt,
 											ActiveSnapshot,
 											crosscheck_snapshot,
@@ -1790,6 +1791,7 @@ _SPI_pquery(QueryDesc *queryDesc, bool fire_triggers, long tcount)
 		AfterTriggerEndQuery(queryDesc->estate);
 
 	ExecutorEnd(queryDesc);
+	/* FreeQueryDesc is done by the caller */
 
 #ifdef SPI_EXECUTOR_STATS
 	if (ShowExecutorStats)
-- 
GitLab