diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c index b160551b5ed6ed16693904488b9c3bda7e0146d3..82ac53e148724502e5bd51a33df37a040274c53d 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; }