diff options
Diffstat (limited to 'src/backend/access/gin/ginxlog.c')
-rw-r--r-- | src/backend/access/gin/ginxlog.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/backend/access/gin/ginxlog.c b/src/backend/access/gin/ginxlog.c index ddac3430613..ca7bee1f340 100644 --- a/src/backend/access/gin/ginxlog.c +++ b/src/backend/access/gin/ginxlog.c @@ -774,7 +774,7 @@ ginContinueSplit(ginIncompleteSplit *split) GinState ginstate; Relation reln; Buffer buffer; - GinBtreeStack stack; + GinBtreeStack *stack; /* * elog(NOTICE,"ginContinueSplit root:%u l:%u r:%u", split->rootBlkno, @@ -802,22 +802,22 @@ ginContinueSplit(ginIncompleteSplit *split) } else { - ginPrepareDataScan(&btree, reln); + ginPrepareDataScan(&btree, reln, split->rootBlkno); } - stack.blkno = split->leftBlkno; - stack.buffer = buffer; - stack.off = InvalidOffsetNumber; - stack.parent = NULL; + stack = palloc(sizeof(GinBtreeStack)); + stack->blkno = split->leftBlkno; + stack->buffer = buffer; + stack->off = InvalidOffsetNumber; + stack->parent = NULL; - ginFindParents(&btree, &stack, split->rootBlkno); + ginFindParents(&btree, stack); + LockBuffer(stack->parent->buffer, GIN_UNLOCK); + ginFinishSplit(&btree, stack, NULL); - btree.prepareDownlink(&btree, buffer); - ginInsertValue(&btree, stack.parent, NULL); + /* buffer is released by ginFinishSplit */ FreeFakeRelcacheEntry(reln); - - UnlockReleaseBuffer(buffer); } void |