aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-03-18 05:25:23 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-03-18 05:25:23 +0000
commitcef01c3355975bdc6724fbc226e85d55316162a3 (patch)
tree720629ffce00148a15959574bcc3f73b3d028f11
parentafb66ad8dd7fa731a82a587d48de764fa64b8fbf (diff)
downloadpostgresql-cef01c3355975bdc6724fbc226e85d55316162a3.tar.gz
postgresql-cef01c3355975bdc6724fbc226e85d55316162a3.zip
Avoid infinite loop in InvalidateBuffer if we ourselves are holding
a pin on the victim buffer.
-rw-r--r--src/backend/storage/buffer/bufmgr.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 59dec8f9ead..bda4544b279 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.186 2005/03/04 20:21:06 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.187 2005/03/18 05:25:23 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -551,6 +551,9 @@ retry:
{
UnlockBufHdr_NoHoldoff(buf);
LWLockRelease(BufMappingLock);
+ /* safety check: should definitely not be our *own* pin */
+ if (PrivateRefCount[buf->buf_id] != 0)
+ elog(ERROR, "buffer is pinned in InvalidateBuffer");
WaitIO(buf);
goto retry;
}