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).
This commit is contained in:
parent
9ddfe034c7
commit
dd7444cfe2
|
@ -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:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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:
|
||||||
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:
|
||||||
|
|
||||||
/* 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);
|
||||||
|
|
Loading…
Reference in New Issue