From 188399232ac0248182679c53bf6ded65ad44ddad Mon Sep 17 00:00:00 2001 From: Wenbo Date: Mon, 24 Feb 2025 10:18:14 +0800 Subject: [PATCH] Fix corruption when entry->buffer changed to nonleaf while unlocked. --- src/rumget.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/rumget.c b/src/rumget.c index ca5d83ee00..d4986b3af8 100644 --- a/src/rumget.c +++ b/src/rumget.c @@ -889,7 +889,14 @@ entryGetNextItem(RumState * rumstate, RumScanEntry entry, Snapshot snapshot) LockBuffer(entry->buffer, RUM_SHARE); page = BufferGetPage(entry->buffer); - + if (!RumPageIsLeaf(page)) + { + /* + * Root page becomes non-leaf while we unlock it. just return. + */ + LockBuffer(entry->buffer, RUM_UNLOCK); + return; + } PredicateLockPage(rumstate->index, BufferGetBlockNumber(entry->buffer), snapshot); if (scanPage(rumstate, entry, &entry->curItem, false))