diff --git a/src/backend/access/gin/ginfast.c b/src/backend/access/gin/ginfast.c
index ca2a32bd25..b8104ceeda 100644
--- a/src/backend/access/gin/ginfast.c
+++ b/src/backend/access/gin/ginfast.c
@@ -494,10 +494,12 @@ ginHeapTupleFastCollect(GinState *ginstate,
 		collector->lentuples = nentries * ginstate->origTupdesc->natts;
 		collector->tuples = (IndexTuple *) palloc(sizeof(IndexTuple) * collector->lentuples);
 	}
-
-	while (collector->ntuples + nentries > collector->lentuples)
+	else if (collector->lentuples < collector->ntuples + nentries)
 	{
-		collector->lentuples *= 2;
+		do {
+			collector->lentuples *= 2;
+		} while (collector->lentuples < collector->ntuples + nentries);
+
 		collector->tuples = (IndexTuple *) repalloc(collector->tuples,
 													sizeof(IndexTuple) * collector->lentuples);
 	}
