buf_block_t*
buf_LRU_get_free_block(
buf_pool_t* buf_pool/*!< in/out: buffer pool instance */
)
功能:
访问数据页的流程。获取空闲的内存块
流程:loop:
buf_pool_mutex_enter(buf_pool);
//UT_LIST_GET_FIRST(buf_pool->free),为空的话block=NULL
//1
block = buf_LRU_get_free_only(buf_pool);
if (block) {
buf_pool_mutex_exit(buf_pool);
memset(&block->page.zip, 0, sizeof block->page.zip);
return(block);
}
//2
if (buf_pool->init_flush[BUF_FLUSH_LRU]
&& srv_use_doublewrite_buf
&& buf_dblwr != NULL) {
buf_pool_mutex_exit(buf_pool);
buf_flush_wait_batch_end(buf_pool, BUF_FLUSH_LRU);
goto loop;
}
//3
freed = FALSE;
//第一次进来时,try_LRU_scan为TRUE
if (buf_pool->try_LRU_scan || n_iterations > 0) {
freed = buf_LRU_scan_and_free_block(buf_pool,n_iterations > 0);
//3.1