From dd7444cfe2c73a31e45e7ee93bf1555e7920177c Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 25 Oct 2007 19:13:37 +0000 Subject: [PATCH] Fix memory management for new variables -- they must actually survive transaction end, in case we decide to do a vacuum analyze (which is done in two xacts). --- src/backend/postmaster/autovacuum.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index d77a4d9613..82c31d918c 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -55,7 +55,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.64 2007/10/25 14:45:55 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.65 2007/10/25 19:13:37 alvherre Exp $ * *------------------------------------------------------------------------- */ @@ -2099,11 +2099,9 @@ next_worker: /* * Save the relation name for a possible error message, to avoid a - * catalog lookup in case of an error. We do it in - * TopTransactionContext so that they go away automatically in the next - * iteration. + * catalog lookup in case of an error. Note: they must live in a + * long-lived memory context. */ - MemoryContextSwitchTo(TopTransactionContext); datname = get_database_name(MyDatabaseId); nspname = get_namespace_name(get_rel_namespace(tab->at_relid)); relname = get_rel_name(tab->at_relid); @@ -2116,6 +2114,7 @@ next_worker: PG_TRY(); { /* have at it */ + MemoryContextSwitchTo(TopTransactionContext); autovacuum_do_vac_analyze(tab->at_relid, tab->at_dovacuum, tab->at_doanalyze, @@ -2152,6 +2151,9 @@ next_worker: /* be tidy */ pfree(tab); + pfree(datname); + pfree(nspname); + pfree(relname); /* remove my info from shared memory */ LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);