Index: src/backend/access/gin/ginxlog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/gin/ginxlog.c,v
retrieving revision 1.6
diff -c -r1.6 ginxlog.c
*** src/backend/access/gin/ginxlog.c	5 Jan 2007 22:19:21 -0000	1.6
--- src/backend/access/gin/ginxlog.c	1 Jun 2007 13:35:05 -0000
***************
*** 26,37 ****
  	BlockNumber leftBlkno;
  	BlockNumber rightBlkno;
  	BlockNumber rootBlkno;
  } ginIncompleteSplit;
  
  static List *incomplete_splits;
  
  static void
! pushIncompleteSplit(RelFileNode node, BlockNumber leftBlkno, BlockNumber rightBlkno, BlockNumber rootBlkno)
  {
  	ginIncompleteSplit *split;
  
--- 26,39 ----
  	BlockNumber leftBlkno;
  	BlockNumber rightBlkno;
  	BlockNumber rootBlkno;
+ 	XLogRecPtr	lsn;
  } ginIncompleteSplit;
  
  static List *incomplete_splits;
  
  static void
! pushIncompleteSplit(RelFileNode node, BlockNumber leftBlkno, 
! 					BlockNumber rightBlkno, BlockNumber rootBlkno, XLogRecPtr lsn)
  {
  	ginIncompleteSplit *split;
  
***************
*** 43,48 ****
--- 45,51 ----
  	split->leftBlkno = leftBlkno;
  	split->rightBlkno = rightBlkno;
  	split->rootBlkno = rootBlkno;
+ 	split->lsn = lsn;
  
  	incomplete_splits = lappend(incomplete_splits, split);
  
***************
*** 324,330 ****
  		UnlockReleaseBuffer(rootBuf);
  	}
  	else
! 		pushIncompleteSplit(data->node, data->lblkno, data->rblkno, data->rootBlkno);
  
  	UnlockReleaseBuffer(rbuffer);
  	UnlockReleaseBuffer(lbuffer);
--- 327,333 ----
  		UnlockReleaseBuffer(rootBuf);
  	}
  	else
! 		pushIncompleteSplit(data->node, data->lblkno, data->rblkno, data->rootBlkno, lsn);
  
  	UnlockReleaseBuffer(rbuffer);
  	UnlockReleaseBuffer(lbuffer);
***************
*** 600,605 ****
--- 603,623 ----
  gin_safe_restartpoint(void)
  {
  	if (incomplete_splits)
+ 	{
+ 		ListCell   *l;
+ 		int			nsplits = list_length(incomplete_splits);
+ 
+ 		elog(LOG,"GIN incomplete splits=%d", nsplits);
+ 		if (nsplits < 10)
+ 		{
+ 			foreach(l, incomplete_splits)
+ 			{
+ 				ginIncompleteSplit *split = (ginIncompleteSplit *) lfirst(l);
+ 				elog(LOG,"GIN incomplete split root:%u l:%u r:%u at redo %X/%X", 
+ 					split->rootBlkno, split->leftBlkno, split->rightBlkno, split->lsn.xlogid, split->lsn.xrecoff);
+ 			}
+ 		}
  		return false;
+ 	}
  	return true;
  }
