aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/access/transam/xact.c6
-rw-r--r--src/backend/executor/spi.c16
-rw-r--r--src/include/executor/spi.h4
3 files changed, 17 insertions, 9 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 7b29c5d411e..93375b2960e 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.157 2003/11/29 19:51:40 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.158 2003/12/02 19:26:47 joe Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
@@ -977,7 +977,7 @@ CommitTransaction(void)
CallEOXactCallbacks(true);
AtEOXact_GUC(true);
- AtEOXact_SPI();
+ AtEOXact_SPI(true);
AtEOXact_gist();
AtEOXact_hash();
AtEOXact_nbtree();
@@ -1087,7 +1087,7 @@ AbortTransaction(void)
CallEOXactCallbacks(false);
AtEOXact_GUC(false);
- AtEOXact_SPI();
+ AtEOXact_SPI(false);
AtEOXact_gist();
AtEOXact_hash();
AtEOXact_nbtree();
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index 3dee4246af3..5b4d92124d7 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.108 2003/11/29 19:51:48 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.109 2003/12/02 19:26:47 joe Exp $
*
*-------------------------------------------------------------------------
*/
@@ -174,18 +174,26 @@ SPI_finish(void)
}
/*
- * Clean up SPI state at transaction commit or abort (we don't care which).
+ * Clean up SPI state at transaction commit or abort.
*/
void
-AtEOXact_SPI(void)
+AtEOXact_SPI(bool isCommit)
{
/*
* Note that memory contexts belonging to SPI stack entries will be
* freed automatically, so we can ignore them here. We just need to
* restore our static variables to initial state.
*/
- if (_SPI_stack != NULL) /* there was abort */
+ if (_SPI_stack != NULL)
+ {
free(_SPI_stack);
+ if (isCommit)
+ ereport(WARNING,
+ (errcode(ERRCODE_WARNING),
+ errmsg("freeing non-empty SPI stack"),
+ errhint("Check for missing \"SPI_finish\" calls")));
+ }
+
_SPI_current = _SPI_stack = NULL;
_SPI_connected = _SPI_curid = -1;
SPI_processed = 0;
diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h
index b0102c394bf..a6a6f97c526 100644
--- a/src/include/executor/spi.h
+++ b/src/include/executor/spi.h
@@ -2,7 +2,7 @@
*
* spi.h
*
- * $PostgreSQL: pgsql/src/include/executor/spi.h,v 1.40 2003/11/29 22:41:01 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/executor/spi.h,v 1.41 2003/12/02 19:26:47 joe Exp $
*
*-------------------------------------------------------------------------
*/
@@ -116,6 +116,6 @@ extern void SPI_cursor_fetch(Portal portal, bool forward, int count);
extern void SPI_cursor_move(Portal portal, bool forward, int count);
extern void SPI_cursor_close(Portal portal);
-extern void AtEOXact_SPI(void);
+extern void AtEOXact_SPI(bool isCommit);
#endif /* SPI_H */