fix-buffer-pinning-error-in-gin-page-split.patch
text/x-diff
Filename: fix-buffer-pinning-error-in-gin-page-split.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/access/gin/ginbtree.c | 5 | 1 |
diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c
index fc694b40f1..2dd3853e70 100644
--- a/src/backend/access/gin/ginbtree.c
+++ b/src/backend/access/gin/ginbtree.c
@@ -272,7 +272,11 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack)
blkno = GinPageGetOpaque(page)->rightlink;
if (blkno == InvalidBlockNumber)
{
- UnlockReleaseBuffer(buffer);
+ /* Do not release pin on the root buffer */
+ if (buffer != root->buffer)
+ UnlockReleaseBuffer(buffer);
+ else
+ LockBuffer(buffer, GIN_UNLOCK);
break;
}
buffer = ginStepRight(buffer, btree->index, GIN_EXCLUSIVE);