func: Buffer ReleaseAndReadBuffer(Buffer buffer,Relation relation,BlockNumber blockNum) ForkNumber forkNum = MAIN_FORKNUM ; volatile BufferDesc * bufHdr ; if ( ( ( void ) ( ( bool ) 1 ) ) , buffer != 0 )  if ( buffer < 0 )  bufHdr = ( & LocalBufferDescriptors [ - buffer - 1 ] ); if ( bufHdr -> tag . blockNum == blockNum && ( bufHdr -> tag . rnode . relNode == relation -> rd_node . relNode && bufHdr -> tag . rnode . dbNode == relation -> rd_node . dbNode && bufHdr -> tag . rnode . spcNode == relation -> rd_node . spcNode ) && bufHdr -> tag . forkNum == forkNum )  bufHdr = ( & BufferDescriptors [ buffer - 1 ] ); if ( bufHdr -> tag . blockNum == blockNum && ( bufHdr -> tag . rnode . relNode == relation -> rd_node . relNode && bufHdr -> tag . rnode . dbNode == relation -> rd_node . dbNode && bufHdr -> tag . rnode . spcNode == relation -> rd_node . spcNode ) && bufHdr -> tag . forkNum == forkNum )  return ReadBuffer ( relation , blockNum ) ; Buffer ReadBuffer(Relation reln,BlockNumber blockNum) return ReadBufferExtended ( reln , MAIN_FORKNUM , blockNum , RBM_NORMAL , ( ( void * ) 0 ) ) ; Buffer ReadBufferExtended(Relation reln,ForkNumber forkNum,BlockNumber blockNum,ReadBufferMode mode,BufferAccessStrategy strategy) Buffer buf ; if ( reln -> pgstat_info != ( ( void * ) 0 ) )  reln -> pgstat_info -> t_counts . t_blocks_fetched ++; while ( 0 )  buf = ReadBuffer_common ( reln -> rd_smgr , reln -> rd_rel -> relpersistence , forkNum , blockNum , mode , strategy , & hit ); static Buffer ReadBuffer_common(SMgrRelation smgr,char relpersistence,ForkNumber forkNum,BlockNumber blockNum,ReadBufferMode mode,BufferAccessStrategy strategy,bool *hit) volatile BufferDesc * bufHdr ; Block bufBlock ; bool found ; bool isExtend ; bool isLocalBuf = ( smgr -> smgr_rnode . backend != - 1 ) ; isExtend = ( blockNum == ( ( BlockNumber ) 0xFFFFFFFF ) ); if ( isExtend )  blockNum = smgrnblocks ( smgr , forkNum ); if ( isLocalBuf )  bufHdr = ( LocalBufferAlloc ( smgr , forkNum , blockNum , & found ) ); bufHdr = BufferAlloc ( smgr , relpersistence , forkNum , blockNum , strategy , & found ); if ( found )  if ( ! isExtend )  bufBlock = ( isLocalBuf ? LocalBufferBlockPointers [ - ( bufHdr -> buf_id + 2 ) ] : ( ( Block ) ( BufferBlocks + ( ( Size ) ( bufHdr -> buf_id ) ) * 8192 ) ) ); if ( isLocalBuf )  bufHdr -> flags &= ~ ( 1 << 1 ); bufHdr -> flags &= ~ ( 1 << 1 ); * ( ( volatile slock_t * ) ( & bufHdr -> buf_hdr_lock ) ) = 0; while ( ! StartBufferIO ( bufHdr , ( ( bool ) 1 ) ) )  bufBlock = ( isLocalBuf ? LocalBufferBlockPointers [ - ( bufHdr -> buf_id + 2 ) ] : ( ( Block ) ( BufferBlocks + ( ( Size ) ( bufHdr -> buf_id ) ) * 8192 ) ) ); if ( isExtend )  if ( mode == RBM_ZERO )  if ( ! PageHeaderIsValid ( ( ( PageHeader ) bufBlock ) ) )  if ( mode == RBM_ZERO_ON_ERROR || zero_damaged_pages )  void * _vstart = ( void * ) ( ( char * ) bufBlock ) ; int _val = 0 ; Size _len = 8192 ; if ( ( ( ( intptr_t ) _vstart ) & sizeof ( long ) - 1 ) == 0 && ( _len & sizeof ( long ) - 1 ) == 0 && _val == 0 && _len <= 1024 && 1024 != 0 )  memset ( _vstart , _val , _len ); while ( 0 )  