diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c
new file mode 100644
index dfc3dc4..d698433
*** a/src/backend/access/gin/ginget.c
--- b/src/backend/access/gin/ginget.c
*************** entryGetItem(GinState *ginstate, GinScan
*** 732,739 ****
  
  		do
  		{
! 			if (entry->matchResult == NULL ||
! 				entry->offset >= entry->matchResult->ntuples)
  			{
  				entry->matchResult = tbm_iterate(entry->matchIterator);
  
--- 732,741 ----
  
  		do
  		{
! 			while (entry->matchResult == NULL ||
! 				(entry->matchResult->ntuples > 0 &&
! 				 entry->offset >= entry->matchResult->ntuples) ||
! 				entry->matchResult->blockno < advancePastBlk)
  			{
  				entry->matchResult = tbm_iterate(entry->matchIterator);
  
*************** entryGetItem(GinState *ginstate, GinScan
*** 752,758 ****
  				 */
  				if (entry->matchResult->blockno < advancePastBlk ||
  					(entry->matchResult->blockno == advancePastBlk &&
! 					 entry->matchResult->offsets[entry->offset] <= advancePastOff))
  				{
  					entry->offset = entry->matchResult->ntuples;
  					continue;
--- 754,761 ----
  				 */
  				if (entry->matchResult->blockno < advancePastBlk ||
  					(entry->matchResult->blockno == advancePastBlk &&
! 					 entry->matchResult->ntuples > 0 &&
! 					 entry->matchResult->offsets[entry->matchResult->ntuples - 1] <= advancePastOff))
  				{
  					entry->offset = entry->matchResult->ntuples;
  					continue;
*************** entryGetItem(GinState *ginstate, GinScan
*** 767,772 ****
--- 770,778 ----
  				entry->offset = 0;
  			}
  
+ 			if (entry->isFinished == TRUE)
+ 				break;
+ 
  			if (entry->matchResult->ntuples < 0)
  			{
  				/*
