diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 6643ae6131..2e75225253 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/gist/gist.c,v 1.123 2005/06/28 15:51:00 teodor Exp $ + * $PostgreSQL: pgsql/src/backend/access/gist/gist.c,v 1.124 2005/06/29 14:06:14 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -362,6 +362,7 @@ gistplacetopage(GISTInsertState *state, GISTSTATE *giststate) { Page page = (Page)BufferGetPage(ptr->buffer); GistPageGetOpaque(page)->rightlink = ( ptr->next ) ? ptr->next->block.blkno : InvalidBlockNumber; + GistPageGetOpaque(page)->nsn = PageGetLSN(page); LockBuffer( ptr->buffer, GIST_UNLOCK ); WriteBuffer(ptr->buffer); ptr=ptr->next; diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index 940c2ca0d5..cf6d89d27b 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.4 2005/06/28 15:51:00 teodor Exp $ + * $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.5 2005/06/29 14:06:14 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -52,7 +52,7 @@ gistVacuumUpdate( GistVacuum *gv, BlockNumber blkno, bool needunion ) { int lenaddon=4, curlenaddon=0, ntodelete=0; IndexTuple idxtuple, *addon=NULL; bool needwrite=false; - OffsetNumber *todelete=NULL; + OffsetNumber todelete[ BLCKSZ/SizeOfIptrData ]; ItemPointerData *completed=NULL; int ncompleted=0, lencompleted=16; @@ -67,7 +67,6 @@ gistVacuumUpdate( GistVacuum *gv, BlockNumber blkno, bool needunion ) { GistClearTuplesDeleted(page); } } else { - todelete = (OffsetNumber*)palloc( MAXALIGN(sizeof(OffsetNumber)*(maxoff+1)) ); completed = (ItemPointerData*)palloc( sizeof(ItemPointerData)*lencompleted ); addon=(IndexTuple*)palloc(sizeof(IndexTuple)*lenaddon); @@ -143,16 +142,14 @@ gistVacuumUpdate( GistVacuum *gv, BlockNumber blkno, bool needunion ) { XLogRecPtr recptr; XLogRecData *rdata; ItemPointerData key; /* set key for incomplete insert */ + char *xlinfo; ItemPointerSet(&key, blkno, TUPLE_IS_VALID); - oldCtx = MemoryContextSwitchTo(gv->opCtx); - rdata = formSplitRdata(gv->index->rd_node, blkno, &key, dist); + xlinfo = rdata->data; - MemoryContextSwitchTo(oldCtx); - START_CRIT_SECTION(); recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_PAGE_SPLIT, rdata); @@ -164,6 +161,8 @@ gistVacuumUpdate( GistVacuum *gv, BlockNumber blkno, bool needunion ) { } END_CRIT_SECTION(); + pfree( xlinfo ); + pfree( rdata ); } else { ptr = dist; while(ptr) { @@ -267,7 +266,6 @@ gistVacuumUpdate( GistVacuum *gv, BlockNumber blkno, bool needunion ) { for(i=0;i