aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-04-30 21:29:23 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-04-30 21:29:23 +0000
commitf6a3b87c7b5d870471c73ee47b494f8b32e2a3a4 (patch)
treebdd4712c37869213268a175b9919d0f3d6d49cda
parente0095c6c42c97c46e49b747f8cf4ae97ceebfbfd (diff)
downloadpostgresql-f6a3b87c7b5d870471c73ee47b494f8b32e2a3a4.tar.gz
postgresql-f6a3b87c7b5d870471c73ee47b494f8b32e2a3a4.zip
Reset CurrentMemoryContext to TopMemoryContext at the beginning of error
cleanup, ie, as soon as we have caught the longjmp. This ensures that current context will be a valid context throughout error cleanup. Before it was possible that current context was pointing at a context that would get deleted during cleanup, leaving any subsequent pallocs in deep trouble. I was able to provoke an Assert failure when compiled with asserts + -DCLOBBER_FREED_MEMORY, if I did something that would cause an error to be reported by the backend large-object code, because indeed that code operates in a context that gets deleted partway through xact abort --- and CurrentMemoryContext was still pointing at it! Boo hiss.
-rw-r--r--src/backend/tcop/postgres.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index bcb63bb2193..b6c69356130 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.153 2000/04/28 05:07:34 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.154 2000/04/30 21:29:23 tgl Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
@@ -127,7 +127,6 @@ bool ExitAfterAbort = false;
extern int NBuffers;
static bool EchoQuery = false; /* default don't echo */
-time_t tim;
char pg_pathname[MAXPGPATH];
FILE *StatFp = NULL;
@@ -1453,7 +1452,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[])
if (!IsUnderPostmaster)
{
puts("\nPOSTGRES backend interactive interface ");
- puts("$Revision: 1.153 $ $Date: 2000/04/28 05:07:34 $\n");
+ puts("$Revision: 1.154 $ $Date: 2000/04/30 21:29:23 $\n");
}
/*
@@ -1473,7 +1472,8 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[])
if (sigsetjmp(Warn_restart, 1) != 0)
{
- time(&tim);
+ /* Make sure we are in a valid memory context */
+ MemoryContextSwitchTo(TopMemoryContext);
if (Verbose)
TPRINTF(TRACE_VERBOSE, "AbortCurrentTransaction");