Don't run in CacheMemoryContext longer than necessary.
authorTom Lane
Sun, 2 Jul 2000 04:46:09 +0000 (04:46 +0000)
committerTom Lane
Sun, 2 Jul 2000 04:46:09 +0000 (04:46 +0000)
src/backend/catalog/heap.c

index 9ba935f716d02e975d927289de14e1b74d097fda..dceab60c8e0ec5beb11a0defa9b226e999bae557 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.134 2000/06/28 03:31:22 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.135 2000/07/02 04:46:09 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -166,12 +166,11 @@ heap_create(char *relname,
 {
    static unsigned int uniqueId = 0;
 
-   int         i;
    Oid         relid;
    Relation    rel;
-   int         len;
    bool        nailme = false;
    int         natts = tupDesc->natts;
+   int         i;
    MemoryContext oldcxt;
 
    /* ----------------
@@ -236,13 +235,13 @@ heap_create(char *relname,
     *  allocate a new relation descriptor.
     * ----------------
     */
-   len = sizeof(RelationData);
-
-   rel = (Relation) palloc(len);
-   MemSet((char *) rel, 0, len);
+   rel = (Relation) palloc(sizeof(RelationData));
+   MemSet((char *) rel, 0, sizeof(RelationData));
    rel->rd_fd = -1;            /* table is not open */
    rel->rd_unlinked = true;    /* table is not created yet */
 
+   RelationSetReferenceCount(rel, 1);
+
    /*
     * create a new tuple descriptor from the one passed in
     */
@@ -257,14 +256,11 @@ heap_create(char *relname,
    if (nailme)
        rel->rd_isnailed = true;
 
-   RelationSetReferenceCount(rel, 1);
-
-   rel->rd_rel = (Form_pg_class) palloc(sizeof *rel->rd_rel);
-
    /* ----------------
     *  initialize the fields of our new relation descriptor
     * ----------------
     */
+   rel->rd_rel = (Form_pg_class) palloc(sizeof *rel->rd_rel);
    MemSet((char *) rel->rd_rel, 0, sizeof *rel->rd_rel);
    strcpy(RelationGetPhysicalRelationName(rel), relname);
    rel->rd_rel->relkind = RELKIND_UNCATALOGED;
@@ -283,10 +279,14 @@ heap_create(char *relname,
        rel->rd_rel->reltype = relid;
    }
 
+   /* ----------------
+    *  done building relcache entry.
+    * ----------------
+    */
+   MemoryContextSwitchTo(oldcxt);
+
    /* ----------------
     *  have the storage manager create the relation.
-    *
-    * XXX shouldn't we switch out of CacheMemoryContext for that?
     * ----------------
     */
 
@@ -296,8 +296,6 @@ heap_create(char *relname,
 
    RelationRegisterRelation(rel);
 
-   MemoryContextSwitchTo(oldcxt);
-
    return rel;
 }