1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-27 23:21:58 +03:00

Remove belt-and-suspenders guards against buffer pin leaks.

Forcibly releasing all leftover buffer pins should be unnecessary now
that we have a robust ResourceOwner mechanism, and it significantly
increases the cost of process shutdown.  Instead, in an assert-enabled
build, assert that no pins are held; in a non-assert-enabled build, do
nothing.
This commit is contained in:
Robert Haas
2010-11-25 00:06:46 -05:00
parent 58dfb07b5d
commit c2281ac87c
2 changed files with 23 additions and 19 deletions

View File

@ -1659,31 +1659,26 @@ InitBufferPoolBackend(void)
}
/*
* Ensure we have released all shared-buffer locks and pins during backend exit
* During backend exit, ensure that we released all shared-buffer locks and
* assert that we have no remaining pins.
*/
static void
AtProcExit_Buffers(int code, Datum arg)
{
int i;
AbortBufferIO();
UnlockBuffers();
for (i = 0; i < NBuffers; i++)
#ifdef USE_ASSERT_CHECKING
if (assert_enabled)
{
if (PrivateRefCount[i] != 0)
{
volatile BufferDesc *buf = &(BufferDescriptors[i]);
int i;
/*
* We don't worry about updating ResourceOwner; if we even got
* here, it suggests that ResourceOwners are messed up.
*/
PrivateRefCount[i] = 1; /* make sure we release shared pin */
UnpinBuffer(buf, false);
for (i = 0; i < NBuffers; i++)
{
Assert(PrivateRefCount[i] == 0);
}
}
#endif
/* localbuf.c needs a chance too */
AtProcExit_LocalBuffers();