aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/buffer/bufmgr.c24
-rw-r--r--src/backend/storage/buffer/localbuf.c22
2 files changed, 37 insertions, 9 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index ea7d469f2f4..0b4c2ed0a01 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 30dc8098ed2..03055c96d85 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
}