*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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)
* 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 $
*
*-------------------------------------------------------------------------
*/
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;
+}
* 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 $
*
*-------------------------------------------------------------------------
*/
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);