/********************************************************************//**
Initializes a buffer control block when the buf_pool is created. */
static
void
buf_block_init(
/*===========*/
    buf_pool_t*    buf_pool,    /*!< in: buffer pool instance */
    buf_block_t*    block,        /*!< in: pointer to control block */
    byte*        frame)        /*!< in: pointer to buffer frame */
{
    UNIV_MEM_DESC(frame, UNIV_PAGE_SIZE, block);

    block->frame = frame;

    block->page.buf_pool_index = buf_pool_index(buf_pool);
    block->page.state = BUF_BLOCK_NOT_USED;
    block->page.buf_fix_count = ;
    block->page.io_fix = BUF_IO_NONE;

    block->modify_clock = ;

#if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
    block->page.file_page_was_freed = FALSE;
#endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */

    block->check_index_page_at_flush = FALSE;
    block->index = NULL;

#ifdef UNIV_DEBUG
    block->page.in_page_hash = FALSE;
    block->page.in_zip_hash = FALSE;
    block->page.in_flush_list = FALSE;
    block->page.in_free_list = FALSE;
    block->page.in_LRU_list = FALSE;
    block->in_unzip_LRU_list = FALSE;
#endif /* UNIV_DEBUG */
#if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG
    block->n_pointers = ;
#endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */
    page_zip_des_init(&block->page.zip);

#if defined PFS_SKIP_BUFFER_MUTEX_RWLOCK || defined PFS_GROUP_BUFFER_SYNC
    /* If PFS_SKIP_BUFFER_MUTEX_RWLOCK is defined, skip registration
    of buffer block mutex/rwlock with performance schema. If
    PFS_GROUP_BUFFER_SYNC is defined, skip the registration
    since buffer block mutex/rwlock will be registered later in
    pfs_register_buffer_block() */

    mutex_create(PFS_NOT_INSTRUMENTED, &block->mutex, SYNC_BUF_BLOCK);
    rw_lock_create(PFS_NOT_INSTRUMENTED, &block->lock, SYNC_LEVEL_VARYING);

# ifdef UNIV_SYNC_DEBUG
    rw_lock_create(PFS_NOT_INSTRUMENTED,
               &block->debug_latch, SYNC_NO_ORDER_CHECK);
# endif /* UNIV_SYNC_DEBUG */

#else /* PFS_SKIP_BUFFER_MUTEX_RWLOCK || PFS_GROUP_BUFFER_SYNC */
    mutex_create(buffer_block_mutex_key, &block->mutex, SYNC_BUF_BLOCK);
    rw_lock_create(buf_block_lock_key, &block->lock, SYNC_LEVEL_VARYING);

# ifdef UNIV_SYNC_DEBUG
    rw_lock_create(buf_block_debug_latch_key,
               &block->debug_latch, SYNC_NO_ORDER_CHECK);
# endif /* UNIV_SYNC_DEBUG */
#endif /* PFS_SKIP_BUFFER_MUTEX_RWLOCK || PFS_GROUP_BUFFER_SYNC */

    ut_ad(rw_lock_validate(&(block->lock)));

}
04-18 16:01
查看更多