1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-13 16:22:44 +03:00

Fixes: Errors when PQexec() in backend creates temp

relations and transaction is aborted

Submitted by: wieck@sapserv.debis.de (Jan Wieck)
This commit is contained in:
Marc G. Fournier
1996-10-24 07:55:54 +00:00
parent e152661200
commit 20b4c46e26
4 changed files with 30 additions and 8 deletions

View File

@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.1.1.1 1996/07/09 06:21:15 scrappy Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.2 1996/10/24 07:54:45 scrappy Exp $
*
* INTERFACE ROUTINES
* heap_creatr() - Create an uncataloged heap relation
@@ -315,6 +315,13 @@ heap_creatr(char *name,
rdesc->rd_rel->reltype = relid;
}
/* ----------------
* remember if this is a temp relation
* ----------------
*/
rdesc->rd_istemp = isTemp;
/* ----------------
* have the storage manager create the relation.
* ----------------
@@ -1306,6 +1313,9 @@ heap_destroy(char *relname)
* ----------------
*/
(void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
if(rdesc->rd_istemp) {
rdesc->rd_tmpunlinked = TRUE;
}
heap_close(rdesc);
}
@@ -1320,6 +1330,9 @@ heap_destroyr(Relation rdesc)
{
ReleaseTmpRelBuffers(rdesc);
(void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
if(rdesc->rd_istemp) {
rdesc->rd_tmpunlinked = TRUE;
}
heap_close(rdesc);
RemoveFromTempRelList(rdesc);
}
@@ -1357,7 +1370,7 @@ InitTempRelList()
tempRels = (TempRelList*)malloc(sizeof(TempRelList));
tempRels->size = TEMP_REL_LIST_SIZE;
tempRels->rels = (Relation*)malloc(sizeof(Relation) * tempRels->size);
memset(tempRels->rels, sizeof(Relation) * tempRels->size , 0);
memset(tempRels->rels, 0, sizeof(Relation) * tempRels->size);
tempRels->num = 0;
}
@@ -1418,7 +1431,7 @@ DestroyTempRels()
for (i=0;i<tempRels->num;i++) {
rdesc = tempRels->rels[i];
/* rdesc may be NULL if it has been removed from the list already */
if (rdesc)
if (rdesc)
heap_destroyr(rdesc);
}
free(tempRels->rels);