From 1dfbbd51e778c924b2958c69308adf02681d0801 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 26 Dec 2002 22:37:42 +0000
Subject: [PATCH] Don't try to free executor state of an InitPlan early ---
 this breaks EXPLAIN ANALYZE.  (Premature optimization is the root of all
 evil?)

---
 src/backend/executor/nodeSubplan.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/src/backend/executor/nodeSubplan.c b/src/backend/executor/nodeSubplan.c
index 2f5ab52e213..5a6950e0bee 100644
--- a/src/backend/executor/nodeSubplan.c
+++ b/src/backend/executor/nodeSubplan.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSubplan.c,v 1.39 2002/12/15 16:17:46 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSubplan.c,v 1.40 2002/12/26 22:37:42 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -475,15 +475,6 @@ ExecSetParamPlan(SubPlanState *node, ExprContext *econtext)
 		}
 	}
 
-	if (planstate->plan->extParam == NULL) /* un-correlated ... */
-	{
-		ExecEndPlan(planstate, node->sub_estate);
-		/* mustn't free context while still in it... */
-		MemoryContextSwitchTo(oldcontext);
-		FreeExecutorState(node->sub_estate);
-		node->needShutdown = false;
-	}
-
 	MemoryContextSwitchTo(oldcontext);
 }
 
@@ -502,6 +493,8 @@ ExecEndSubPlan(SubPlanState *node)
 		ExecEndPlan(node->planstate, node->sub_estate);
 		MemoryContextSwitchTo(oldcontext);
 		FreeExecutorState(node->sub_estate);
+		node->sub_estate = NULL;
+		node->planstate = NULL;
 		node->needShutdown = false;
 	}
 	if (node->curTuple)
-- 
GitLab