aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/buffer/bufmgr.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-11-17 17:42:02 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-11-17 17:42:02 +0000
commitc859308aba7edef428994e6de90ff35f35a328c5 (patch)
tree14940f255a6c69d44a41f1211d6c8787524abd5e /src/backend/storage/buffer/bufmgr.c
parent84bb3876bc6efad2c6b36198d6562797af6b0549 (diff)
downloadpostgresql-c859308aba7edef428994e6de90ff35f35a328c5.tar.gz
postgresql-c859308aba7edef428994e6de90ff35f35a328c5.zip
DropRelFileNodeBuffers failed to fix the state of the lookup hash table
that was added to localbuf.c in 8.1; therefore, applying it to a temp table left corrupt lookup state in memory. The only case where this had a significant chance of causing problems was an ON COMMIT DELETE ROWS temp table; the other possible paths left bogus state that was unlikely to be used again. Per report from Csaba Nagy.
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
-rw-r--r--src/backend/storage/buffer/bufmgr.c25
1 files changed, 4 insertions, 21 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 4d2c869860f..b7331f9abe6 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.198 2005/10/27 17:07:58 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.199 2005/11/17 17:42:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1384,34 +1384,17 @@ DropRelFileNodeBuffers(RelFileNode rnode, bool istemp,
BlockNumber firstDelBlock)
{
int i;
- volatile BufferDesc *bufHdr;
if (istemp)
{
- for (i = 0; i < NLocBuffer; i++)
- {
- bufHdr = &LocalBufferDescriptors[i];
- if (RelFileNodeEquals(bufHdr->tag.rnode, rnode) &&
- bufHdr->tag.blockNum >= firstDelBlock)
- {
- if (LocalRefCount[i] != 0)
- elog(ERROR, "block %u of %u/%u/%u is still referenced (local %u)",
- bufHdr->tag.blockNum,
- bufHdr->tag.rnode.spcNode,
- bufHdr->tag.rnode.dbNode,
- bufHdr->tag.rnode.relNode,
- LocalRefCount[i]);
- CLEAR_BUFFERTAG(bufHdr->tag);
- bufHdr->flags = 0;
- bufHdr->usage_count = 0;
- }
- }
+ DropRelFileNodeLocalBuffers(rnode, firstDelBlock);
return;
}
for (i = 0; i < NBuffers; i++)
{
- bufHdr = &BufferDescriptors[i];
+ volatile BufferDesc *bufHdr = &BufferDescriptors[i];
+
LockBufHdr(bufHdr);
if (RelFileNodeEquals(bufHdr->tag.rnode, rnode) &&
bufHdr->tag.blockNum >= firstDelBlock)