@@ -1707,29 +1707,33 @@ FinishWalRecovery(void)
17071707
17081708 XLogPageHeader xlogPageHdr = (XLogPageHeader ) (page );
17091709
1710- xlogPageHdr -> xlp_pageaddr = pageBeginPtr ;
1711- xlogPageHdr -> xlp_magic = XLOG_PAGE_MAGIC ;
1712- xlogPageHdr -> xlp_tli = recoveryTargetTLI ;
1713- /*
1714- * If we start writing with offset from page beginning, pretend in
1715- * page header there is a record ending where actual data will
1716- * start.
1717- */
1718- xlogPageHdr -> xlp_rem_len = offs - lastPageSize ;
1719- xlogPageHdr -> xlp_info = (xlogPageHdr -> xlp_rem_len > 0 ) ? XLP_FIRST_IS_CONTRECORD : 0 ;
1720-
1721- /* Populate the long header correctly, if */
1722- if ((pageBeginPtr & (wal_segment_size - 1 )) == 0 )
1710+ memcpy (page , xlogreader -> readBuf , offs );
1711+ /* if the buffer was zeroed, manually construct the page header */
1712+ if (xlogPageHdr -> xlp_magic != XLOG_PAGE_MAGIC )
17231713 {
1724- XLogLongPageHeader longHdr = (XLogLongPageHeader ) xlogPageHdr ;
1725- xlogPageHdr -> xlp_info |= XLP_LONG_HEADER ;
1726- longHdr -> xlp_seg_size = wal_segment_size ;
1727- longHdr -> xlp_sysid = GetSystemIdentifier ();
1728- longHdr -> xlp_xlog_blcksz = XLOG_BLCKSZ ;
1729- }
1714+ xlogPageHdr -> xlp_pageaddr = pageBeginPtr ;
1715+ xlogPageHdr -> xlp_magic = XLOG_PAGE_MAGIC ;
1716+ xlogPageHdr -> xlp_tli = recoveryTargetTLI ;
1717+ /*
1718+ * If we start writing with offset from page beginning, pretend in
1719+ * page header there is a record ending where actual data will
1720+ * start.
1721+ */
1722+ xlogPageHdr -> xlp_rem_len = offs - lastPageSize ;
1723+ xlogPageHdr -> xlp_info = (xlogPageHdr -> xlp_rem_len > 0 ) ? XLP_FIRST_IS_CONTRECORD : 0 ;
17301724
1731- readOff = XLogSegmentOffset (pageBeginPtr , wal_segment_size );
1725+ /* Populate the long header, if needed */
1726+ if ((pageBeginPtr & (wal_segment_size - 1 )) == 0 )
1727+ {
1728+ XLogLongPageHeader longHdr = (XLogLongPageHeader ) xlogPageHdr ;
1729+ xlogPageHdr -> xlp_info |= XLP_LONG_HEADER ;
1730+ longHdr -> xlp_seg_size = wal_segment_size ;
1731+ longHdr -> xlp_sysid = GetSystemIdentifier ();
1732+ longHdr -> xlp_xlog_blcksz = XLOG_BLCKSZ ;
1733+ }
17321734
1735+ readOff = XLogSegmentOffset (pageBeginPtr , wal_segment_size );
1736+ }
17331737 result -> lastPageBeginPtr = pageBeginPtr ;
17341738 result -> lastPage = page ;
17351739 elog (LOG , "Continue writing WAL at %X/%X" , LSN_FORMAT_ARGS (xlogreader -> EndRecPtr ));
0 commit comments