]> granicus.if.org Git - postgresql/commitdiff
1. Setting rdesc->rd_tmpunlinked to FALSE in heap_creatr () just after
authorVadim B. Mikheev <vadim4o@yahoo.com>
Mon, 20 Jan 1997 04:01:50 +0000 (04:01 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Mon, 20 Jan 1997 04:01:50 +0000 (04:01 +0000)
   smgrcreate ().
2. Checking rdesc->rd_tmpunlinked in heap_destroy () & heap_destroyr ()
   before calling smgrunlink ().

src/backend/catalog/heap.c

index 57371b5822d47c789fc431ce24bf5bf71a148d06..8d6386cf16cafc789b2846ee16f4df9f691bf28f 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.11 1997/01/14 05:38:23 vadim Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.12 1997/01/20 04:01:50 vadim Exp $
  *
  * INTERFACE ROUTINES
  *     heap_creatr()           - Create an uncataloged heap relation
@@ -303,14 +303,15 @@ heap_creatr(char *name,
      */
 
     rdesc->rd_istemp = isTemp;
-    rdesc->rd_tmpunlinked = TRUE;      /* change once table is opened */
     
     /* ----------------
      * have the storage manager create the relation.
      * ----------------
      */
     
+    rdesc->rd_tmpunlinked = TRUE;      /* change once table is created */
     rdesc->rd_fd = (File)smgrcreate(smgr, rdesc);
+    rdesc->rd_tmpunlinked = FALSE;
     
     RelationRegisterRelation(rdesc);
     
@@ -1302,10 +1303,11 @@ heap_destroy(char *relname)
      * unlink the relation and finish up.
      * ----------------
      */
-    (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
-    if(rdesc->rd_istemp) {
-        rdesc->rd_tmpunlinked = TRUE;
+    if ( !(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked) )
+    {
+       (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
     }
+    rdesc->rd_tmpunlinked = TRUE;
 
     RelationUnsetLockForWrite(rdesc);
 
@@ -1322,10 +1324,11 @@ void
 heap_destroyr(Relation rdesc)
 {
     ReleaseRelationBuffers(rdesc);
-    (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
-    if(rdesc->rd_istemp) {
-        rdesc->rd_tmpunlinked = TRUE;
+    if ( !(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked) )
+    {
+       (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
     }
+    rdesc->rd_tmpunlinked = TRUE;
     heap_close(rdesc);
     RemoveFromTempRelList(rdesc);
 }