Fix ancient memory leak in index_create(): RelationInitIndexAccessInfo
authorTom Lane <[email protected]>
Sat, 25 Jun 2005 16:54:30 +0000 (16:54 +0000)
committerTom Lane <[email protected]>
Sat, 25 Jun 2005 16:54:30 +0000 (16:54 +0000)
was being called twice in normal operation, leading to a leak of one set
of relcache subsidiary info.  Per report from Jeff Gold.

src/backend/catalog/index.c

index 0c8f5327c96c889398dc903cdcd399a984791948..debc3945eecd4b74c3d7c961fcaaa4595986d4ce 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.202 2002/10/21 22:06:19 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.202.2.1 2005/06/25 16:54:30 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -736,13 +736,21 @@ index_create(Oid heapRelationId,
    }
 
    /*
-    * Fill in the index strategy structure with information from the
-    * catalogs.  First we must advance the command counter so that we
-    * will see the newly-entered index catalog tuples.
+    * Advance the command counter so that we can see the newly-entered
+    * catalog tuples for the index.
     */
    CommandCounterIncrement();
 
-   RelationInitIndexAccessInfo(indexRelation);
+   /*
+    * In bootstrap mode, we have to fill in the index strategy structure
+    * with information from the catalogs.  If we aren't bootstrapping,
+    * then the relcache entry has already been rebuilt thanks to sinval
+    * update during CommandCounterIncrement.
+    */
+   if (IsBootstrapProcessingMode())
+       RelationInitIndexAccessInfo(indexRelation);
+   else
+       Assert(indexRelation->rd_indexcxt != NULL);
 
    /*
     * If this is bootstrap (initdb) time, then we don't actually fill in