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))