Commit 88164799 authored by Tom Lane's avatar Tom Lane

Need to reset local buffer pin counts, not only shared buffer pins,

before we attempt any file deletions in ShutdownPostgres.  Per Tatsuo.
parent 1f418555
......@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.63 2005/03/04 20:21:06 tgl Exp $
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.64 2005/03/18 16:16:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -259,3 +259,17 @@ AtEOXact_LocalBuffers(bool isCommit)
}
#endif
}
/*
* AtProcExit_LocalBuffers - ensure we have dropped pins during backend exit.
*
* This is just like AtProcExit_Buffers, but for local buffers. We have
* to drop pins to ensure that any attempt to drop temp files doesn't
* fail in DropRelFileNodeBuffers.
*/
void
AtProcExit_LocalBuffers(void)
{
/* just zero the refcounts ... */
MemSet(LocalRefCount, 0, NLocBuffer * sizeof(*LocalRefCount));
}
......@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.142 2005/03/18 05:24:13 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.143 2005/03/18 16:16:09 tgl Exp $
*
*
*-------------------------------------------------------------------------
......@@ -515,6 +515,7 @@ ShutdownPostgres(int code, Datum arg)
*/
LWLockReleaseAll();
AtProcExit_Buffers();
AtProcExit_LocalBuffers();
/*
* In case a transaction is open, delete any files it created. This
......
......@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.90 2005/03/04 20:21:07 tgl Exp $
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.91 2005/03/18 16:16:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -158,6 +158,7 @@ extern void BufferSync(void);
extern void BgBufferSync(void);
extern void InitLocalBuffer(void);
extern void AtProcExit_LocalBuffers(void);
/* in freelist.c */
extern void StrategyHintVacuum(bool vacuum_active);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment