@@ -573,8 +573,7 @@ read_recovery_info(const char *archivedir, TimeLineID tli, uint32 wal_seg_size,
573573{
574574XLogRecPtr errptr ;
575575
576- //errptr = startpoint ? startpoint : xlogreader->EndRecPtr;
577- errptr = curpoint ;
576+ errptr = xlogreader -> ReadRecPtr ;
578577
579578if (errormsg )
580579elog (ERROR ,"Could not read WAL record at %X/%X: %s" ,
@@ -585,7 +584,11 @@ read_recovery_info(const char *archivedir, TimeLineID tli, uint32 wal_seg_size,
585584 (uint32 ) (errptr >>32 ), (uint32 ) (errptr ));
586585}
587586
588- curpoint = xlogreader -> EndRecPtr ;
587+ /*
588+ * Prior Pg13 we need to set it to continue.
589+ * After Pg13 it is ignored in WalReadRecord.
590+ */
591+ curpoint = InvalidXLogRecPtr ;
589592
590593if (getRecordTimestamp (xlogreader ,& last_time ))
591594{
@@ -594,12 +597,13 @@ read_recovery_info(const char *archivedir, TimeLineID tli, uint32 wal_seg_size,
594597/* Found timestamp in WAL record 'record' */
595598res = true;
596599}
597- }while (curpoint <= endpoint );
600+ }while (xlogreader -> EndRecPtr < endpoint + 1 );
598601
599602if (res )
600603gotocleanup ;
601604
602605/* goto previous segment */
606+ endpoint = endpoint - (endpoint %wal_seg_size )- 1 ;
603607startpoint -= wal_seg_size ;
604608}while (startpoint + wal_seg_size > start_lsn );
605609