diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c
index 2ba8b89ee359c2910ce582d810ea51679fd39a60..b2aad2133c27e823e87974cdc71a07e894899628 100644
--- a/src/backend/executor/nodeBitmapHeapscan.c
+++ b/src/backend/executor/nodeBitmapHeapscan.c
@@ -21,7 +21,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/executor/nodeBitmapHeapscan.c,v 1.33 2009/01/12 05:10:44 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/executor/nodeBitmapHeapscan.c,v 1.34 2009/01/12 16:00:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -236,10 +236,22 @@ BitmapHeapNext(BitmapHeapScanState *node)
 #endif /* USE_PREFETCH */
 		}
 
+		/*
+		 * Out of range?  If so, nothing more to look at on this page
+		 */
+		if (scan->rs_cindex < 0 || scan->rs_cindex >= scan->rs_ntuples)
+		{
+			node->tbmres = tbmres = NULL;
+			continue;
+		}
+
 #ifdef USE_PREFETCH
 		/*
 		 * We issue prefetch requests *after* fetching the current page
 		 * to try to avoid having prefetching interfere with the main I/O.
+		 * Also, this should happen only when we have determined there is
+		 * still something to do on the current page, else we may uselessly
+		 * prefetch the same page we are just about to request for real.
 		 */
 		if (prefetch_iterator)
 		{
@@ -260,15 +272,6 @@ BitmapHeapNext(BitmapHeapScanState *node)
 		}
 #endif /* USE_PREFETCH */
 
-		/*
-		 * Out of range?  If so, nothing more to look at on this page
-		 */
-		if (scan->rs_cindex < 0 || scan->rs_cindex >= scan->rs_ntuples)
-		{
-			node->tbmres = tbmres = NULL;
-			continue;
-		}
-
 		/*
 		 * Okay to fetch the tuple
 		 */