diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 400fbcf1ff..da1998a0d5 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) diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index efb3ac4a90..d1410d04a0 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -15,7 +15,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/lmgr/lwlock.c,v 1.19 2003/12/20 17:31:21 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/storage/lmgr/lwlock.c,v 1.20 2004/06/11 16:43:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -519,3 +519,23 @@ LWLockReleaseAll(void) LWLockRelease(held_lwlocks[num_held_lwlocks - 1]); } } + + +/* + * LWLockHeldByMe - test whether my process currently holds a lock + * + * This is meant as debug support only. We do not distinguish whether the + * lock is held shared or exclusive. + */ +bool +LWLockHeldByMe(LWLockId lockid) +{ + int i; + + for (i = 0; i < num_held_lwlocks; i++) + { + if (held_lwlocks[i] == lockid) + return true; + } + return false; +} diff --git a/src/include/storage/lwlock.h b/src/include/storage/lwlock.h index e06d9a4bf7..b1f6fc9510 100644 --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/lwlock.h,v 1.11 2004/05/31 03:48:10 tgl Exp $ + * $PostgreSQL: pgsql/src/include/storage/lwlock.h,v 1.12 2004/06/11 16:43:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -62,6 +62,7 @@ extern void LWLockAcquire(LWLockId lockid, LWLockMode mode); extern bool LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode); extern void LWLockRelease(LWLockId lockid); extern void LWLockReleaseAll(void); +extern bool LWLockHeldByMe(LWLockId lockid); extern int NumLWLocks(void); extern int LWLockShmemSize(void);