1. Setting rdesc->rd_tmpunlinked to FALSE in heap_creatr () just after

smgrcreate ().
2. Checking rdesc->rd_tmpunlinked in heap_destroy () & heap_destroyr ()
   before calling smgrunlink ().
This commit is contained in:
Vadim B. Mikheev 1997-01-20 04:01:50 +00:00
parent 52052f3a19
commit 9d1879388f
1 changed files with 11 additions and 8 deletions

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 * INTERFACE ROUTINES
* heap_creatr() - Create an uncataloged heap relation * heap_creatr() - Create an uncataloged heap relation
@ -303,14 +303,15 @@ heap_creatr(char *name,
*/ */
rdesc->rd_istemp = isTemp; rdesc->rd_istemp = isTemp;
rdesc->rd_tmpunlinked = TRUE; /* change once table is opened */
/* ---------------- /* ----------------
* have the storage manager create the relation. * 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_fd = (File)smgrcreate(smgr, rdesc);
rdesc->rd_tmpunlinked = FALSE;
RelationRegisterRelation(rdesc); RelationRegisterRelation(rdesc);
@ -1302,10 +1303,11 @@ heap_destroy(char *relname)
* unlink the relation and finish up. * unlink the relation and finish up.
* ---------------- * ----------------
*/ */
(void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc); if ( !(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked) )
if(rdesc->rd_istemp) { {
rdesc->rd_tmpunlinked = TRUE; (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
} }
rdesc->rd_tmpunlinked = TRUE;
RelationUnsetLockForWrite(rdesc); RelationUnsetLockForWrite(rdesc);
@ -1322,10 +1324,11 @@ void
heap_destroyr(Relation rdesc) heap_destroyr(Relation rdesc)
{ {
ReleaseRelationBuffers(rdesc); ReleaseRelationBuffers(rdesc);
(void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc); if ( !(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked) )
if(rdesc->rd_istemp) { {
rdesc->rd_tmpunlinked = TRUE; (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
} }
rdesc->rd_tmpunlinked = TRUE;
heap_close(rdesc); heap_close(rdesc);
RemoveFromTempRelList(rdesc); RemoveFromTempRelList(rdesc);
} }