diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index ea7d469f2f..0b4c2ed0a0 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -1699,12 +1699,18 @@ AtEOXact_Buffers(bool isCommit) #ifdef USE_ASSERT_CHECKING if (assert_enabled) { - int i; + int RefCountErrors = 0; + Buffer b; - for (i = 0; i < NBuffers; i++) + for (b = 1; b <= NBuffers; b++) { - Assert(PrivateRefCount[i] == 0); + if (PrivateRefCount[b - 1] != 0) + { + PrintBufferLeakWarning(b); + RefCountErrors++; + } } + Assert(RefCountErrors == 0); } #endif @@ -1739,12 +1745,18 @@ AtProcExit_Buffers(int code, Datum arg) #ifdef USE_ASSERT_CHECKING if (assert_enabled) { - int i; + int RefCountErrors = 0; + Buffer b; - for (i = 0; i < NBuffers; i++) + for (b = 1; b <= NBuffers; b++) { - Assert(PrivateRefCount[i] == 0); + if (PrivateRefCount[b - 1] != 0) + { + PrintBufferLeakWarning(b); + RefCountErrors++; + } } + Assert(RefCountErrors == 0); } #endif diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index 30dc8098ed..03055c96d8 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -497,14 +497,22 @@ void AtEOXact_LocalBuffers(bool isCommit) { #ifdef USE_ASSERT_CHECKING - if (assert_enabled) + if (assert_enabled && LocalRefCount) { + int RefCountErrors = 0; int i; for (i = 0; i < NLocBuffer; i++) { - Assert(LocalRefCount[i] == 0); + if (LocalRefCount[i] != 0) + { + Buffer b = -i - 1; + + PrintBufferLeakWarning(b); + RefCountErrors++; + } } + Assert(RefCountErrors == 0); } #endif } @@ -523,12 +531,20 @@ AtProcExit_LocalBuffers(void) #ifdef USE_ASSERT_CHECKING if (assert_enabled && LocalRefCount) { + int RefCountErrors = 0; int i; for (i = 0; i < NLocBuffer; i++) { - Assert(LocalRefCount[i] == 0); + if (LocalRefCount[i] != 0) + { + Buffer b = -i - 1; + + PrintBufferLeakWarning(b); + RefCountErrors++; + } } + Assert(RefCountErrors == 0); } #endif }