diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-01-20 04:01:50 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-01-20 04:01:50 +0000 |
commit | 9d1879388f61f48b247a48c0298a85c6fd0f8291 (patch) | |
tree | 75e48e7a6b5f9bd75859c72d6baf967679005704 /src | |
parent | 52052f3a19feb9574d07045e843c356bdc4f8741 (diff) |
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 ().
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/catalog/heap.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 57371b5822d..8d6386cf16c 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -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); } |