From 5bab36e9f6c3f3a9e14a89e1124179a339d2c3a1 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 15 Dec 2002 16:17:59 +0000 Subject: Revise executor APIs so that all per-query state structure is built in a per-query memory context created by CreateExecutorState --- and destroyed by FreeExecutorState. This provides a final solution to the longstanding problem of memory leaked by various ExecEndNode calls. --- src/backend/executor/spi.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/backend/executor/spi.c') diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index 147becf6ed..cde9ab6ff6 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.79 2002/12/05 15:50:34 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.80 2002/12/15 16:17:46 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1287,23 +1287,23 @@ _SPI_pquery(QueryDesc *queryDesc, bool runit, int tcount) elog(FATAL, "SPI_select: # of processed tuples check failed"); } - ExecutorEnd(queryDesc); - -#ifdef SPI_EXECUTOR_STATS - if (ShowExecutorStats) - ShowUsage("SPI EXECUTOR STATS"); -#endif - if (dest == SPI) { SPI_processed = _SPI_current->processed; SPI_lastoid = save_lastoid; SPI_tuptable = _SPI_current->tuptable; } - queryDesc->dest = dest; - return res; + ExecutorEnd(queryDesc); + + FreeQueryDesc(queryDesc); + +#ifdef SPI_EXECUTOR_STATS + if (ShowExecutorStats) + ShowUsage("SPI EXECUTOR STATS"); +#endif + return res; } /* -- cgit v1.2.1