From e6cba71503fa80948a050e7e0126e932855e92cc Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 11 Jun 2004 16:43:24 +0000 Subject: Add some code to Assert that when we release pin on a buffer, we are not holding the buffer's cntx_lock or io_in_progress_lock. A recent report from Litao Wu makes me wonder whether it is ever possible for us to drop a buffer and forget to release its cntx_lock. The Assert does not fire in the regression tests, but that proves little ... --- src/backend/storage/buffer/bufmgr.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/backend/storage/buffer') diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 400fbcf1ff7..da1998a0d50 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.169 2004/05/31 20:31:33 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.170 2004/06/11 16:43:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -611,7 +611,12 @@ UnpinBuffer(BufferDesc *buf) Assert(PrivateRefCount[b] > 0); PrivateRefCount[b]--; if (PrivateRefCount[b] == 0) + { buf->refcount--; + /* I'd better not still hold any locks on the buffer */ + Assert(!LWLockHeldByMe(buf->cntx_lock)); + Assert(!LWLockHeldByMe(buf->io_in_progress_lock)); + } if ((buf->flags & BM_PIN_COUNT_WAITER) != 0 && buf->refcount == 1) -- cgit v1.2.3