OSDN Git Service

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

index 9ba935f..dceab60 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;
@@ -284,9 +280,13 @@ heap_create(char *relname,
        }
 
        /* ----------------
+        *      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;
 }