]> granicus.if.org Git - postgresql/commitdiff
Fix memory management for new variables -- they must actually survive
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 25 Oct 2007 19:13:37 +0000 (19:13 +0000)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 25 Oct 2007 19:13:37 +0000 (19:13 +0000)
transaction end, in case we decide to do a vacuum analyze (which is done in two
xacts).

src/backend/postmaster/autovacuum.c

index d77a4d96133ce7c2fd74c325befbaa726622900a..82c31d918cdae6b21494ef7d6555418c225316d7 100644 (file)
@@ -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);