aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/gin/ginbtree.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/gin/ginbtree.c')
-rw-r--r--src/backend/access/gin/ginbtree.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c
index b160551b5ed..82ac53e1487 100644
--- a/src/backend/access/gin/ginbtree.c
+++ b/src/backend/access/gin/ginbtree.c
@@ -275,20 +275,22 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack,
void
ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
{
- GinBtreeStack *parent = stack;
- BlockNumber rootBlkno = InvalidBuffer;
+ GinBtreeStack *parent;
+ BlockNumber rootBlkno;
Page page,
rpage,
lpage;
- /* remember root BlockNumber */
- while (parent)
- {
- rootBlkno = parent->blkno;
+ /* extract root BlockNumber from stack */
+ Assert(stack != NULL);
+ parent = stack;
+ while (parent->parent)
parent = parent->parent;
- }
+ rootBlkno = parent->blkno;
+ Assert(BlockNumberIsValid(rootBlkno));
- while (stack)
+ /* this loop crawls up the stack until the insertion is complete */
+ for (;;)
{
XLogRecData *rdata;
BlockNumber savedRightLink;
@@ -457,7 +459,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
*/
ginFindParents(btree, stack, rootBlkno);
parent = stack->parent;
- page = BufferGetPage(parent->buffer);
+ Assert(parent != NULL);
break;
}