From 8d657c368e491bdd93848eaeea913c498941c788 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 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 87cfe8469d..e2a03a307c 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -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); -- 2.39.5