func: void heap_redo(XLogRecPtr lsn,XLogRecord *record) uint8 info = ( ( record -> xl_info ) & ~0x0F ) ; switch ( info & 0x70 )  heap_xlog_newpage ( lsn , record ); static void heap_xlog_newpage(XLogRecPtr lsn,XLogRecord *record) xl_heap_newpage * xlrec = ( xl_heap_newpage * ) ( ( ( char * ) record ) + ( ( ( intptr_t ) ( sizeof ( XLogRecord ) ) ) + ( 8 - 1 ) & ~ ( ( intptr_t ) ( 8 - 1 ) ) ) ) ; Buffer buffer ; Page page ; buffer = XLogReadBufferExtended ( xlrec -> node , xlrec -> forknum , xlrec -> blkno , RBM_ZERO ); page = ( ( Page ) ( ( Page ) ( ( ( ( void ) ( ( bool ) 1 ) ) , ( buffer < 0 ? LocalBufferBlockPointers [ - buffer - 1 ] : ( ( Block ) ( BufferBlocks + ( ( Size ) ( buffer - 1 ) ) * 8192 ) ) ) ) ) ) ); memcpy ( page , ( ( ( char * ) xlrec ) + ( ( ( size_t ) ( & ( ( xl_heap_newpage * ) 0 ) -> blkno ) ) + sizeof ( BlockNumber ) ) ) , 8192 ); if ( ! ( ( ( ( PageHeader ) page ) -> pd_upper ) == 0 ) )  ( ( PageHeader ) page ) -> pd_lsn = lsn; ( ( PageHeader ) page ) -> pd_tli = ( ( uint16 ) ThisTimeLineID ); 