diff --git a/src/backend/access/transam/subtrans.c b/src/backend/access/transam/subtrans.c
new file mode 100644
index 8170ba3..c02046c
*** a/src/backend/access/transam/subtrans.c
--- b/src/backend/access/transam/subtrans.c
***************
*** 44,50 ****
   * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE, and segment numbering at
   * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE/SLRU_PAGES_PER_SEGMENT.  We need take no
   * explicit notice of that fact in this module, except when comparing segment
!  * and page numbers in TruncateSUBTRANS (see SubTransPagePrecedes).
   */
  
  /* We need four bytes per xact */
--- 44,51 ----
   * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE, and segment numbering at
   * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE/SLRU_PAGES_PER_SEGMENT.  We need take no
   * explicit notice of that fact in this module, except when comparing segment
!  * and page numbers in TruncateSUBTRANS (see SubTransPagePrecedes) and zeroing
!  * them in StartupSUBTRANS.
   */
  
  /* We need four bytes per xact */
*************** StartupSUBTRANS(TransactionId oldestActi
*** 254,259 ****
--- 255,263 ----
  	{
  		(void) ZeroSUBTRANSPage(startPage);
  		startPage++;
+ 		/* must account for wraparound */
+ 		if (startPage > TransactionIdToPage(MaxTransactionId))
+ 			startPage=0;
  	}
  	(void) ZeroSUBTRANSPage(startPage);
  
