summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2000-04-30 21:29:23 +0000
committerTom Lane2000-04-30 21:29:23 +0000
commitf6a3b87c7b5d870471c73ee47b494f8b32e2a3a4 (patch)
treebdd4712c37869213268a175b9919d0f3d6d49cda
parente0095c6c42c97c46e49b747f8cf4ae97ceebfbfd (diff)
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");