Commit dd7444cf authored by Alvaro Herrera's avatar Alvaro Herrera

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).
parent 9ddfe034
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
* *
* *
* IDENTIFICATION * 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: ...@@ -2099,11 +2099,9 @@ next_worker:
/* /*
* Save the relation name for a possible error message, to avoid a * Save the relation name for a possible error message, to avoid a
* catalog lookup in case of an error. We do it in * catalog lookup in case of an error. Note: they must live in a
* TopTransactionContext so that they go away automatically in the next * long-lived memory context.
* iteration.
*/ */
MemoryContextSwitchTo(TopTransactionContext);
datname = get_database_name(MyDatabaseId); datname = get_database_name(MyDatabaseId);
nspname = get_namespace_name(get_rel_namespace(tab->at_relid)); nspname = get_namespace_name(get_rel_namespace(tab->at_relid));
relname = get_rel_name(tab->at_relid); relname = get_rel_name(tab->at_relid);
...@@ -2116,6 +2114,7 @@ next_worker: ...@@ -2116,6 +2114,7 @@ next_worker:
PG_TRY(); PG_TRY();
{ {
/* have at it */ /* have at it */
MemoryContextSwitchTo(TopTransactionContext);
autovacuum_do_vac_analyze(tab->at_relid, autovacuum_do_vac_analyze(tab->at_relid,
tab->at_dovacuum, tab->at_dovacuum,
tab->at_doanalyze, tab->at_doanalyze,
...@@ -2152,6 +2151,9 @@ next_worker: ...@@ -2152,6 +2151,9 @@ next_worker:
/* be tidy */ /* be tidy */
pfree(tab); pfree(tab);
pfree(datname);
pfree(nspname);
pfree(relname);
/* remove my info from shared memory */ /* remove my info from shared memory */
LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE); LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment