index d2e8f6486bb6ae9a4180c989826e7037911acc03..e8928efc1aae1b92eafa8f251abac2e109f3fad9 100644 (file)
@@ -128,11 +128,17 @@ _hash_addovflpage(Relation rel, Buffer metabuf, Buffer buf, bool retain_pin)
break;
/* we assume we do not need to write the unmodified page */
- if ((pageopaque->hasho_flag & LH_BUCKET_PAGE) && retain_pin)
+ if (retain_pin)
+ {
+ /* pin will be retained only for the primary bucket page */
+ Assert(pageopaque->hasho_flag & LH_BUCKET_PAGE);
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
+ }
else
_hash_relbuf(rel, buf);
+ retain_pin = false;
+
buf = _hash_getbuf(rel, nextblkno, HASH_WRITE, LH_OVERFLOW_PAGE);
}
@@ -150,8 +156,12 @@ _hash_addovflpage(Relation rel, Buffer metabuf, Buffer buf, bool retain_pin)
/* logically chain overflow page to previous page */
pageopaque->hasho_nextblkno = BufferGetBlockNumber(ovflbuf);
MarkBufferDirty(buf);
- if ((pageopaque->hasho_flag & LH_BUCKET_PAGE) && retain_pin)
+ if (retain_pin)
+ {
+ /* pin will be retained only for the primary bucket page */
+ Assert(pageopaque->hasho_flag & LH_BUCKET_PAGE);
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
+ }
else
_hash_relbuf(rel, buf);