• Marko Mäkelä's avatar
    MDEV-26010: Assertion lsn > 2 failed in buf_pool_t::get_oldest_modification · 5f22511e
    Marko Mäkelä authored
    In commit 22b62eda (MDEV-25113)
    we introduced a race condition. buf_LRU_free_page() would read
    buf_page_t::oldest_modification() as 0 and assume that
    buf_page_t::list can be used (for attaching the block to the
    buf_pool.free list). In the observed race condition,
    buf_pool_t::delete_from_flush_list() had cleared the field,
    and buf_pool_t::delete_from_flush_list_low() was executing
    concurrently with buf_LRU_block_free_non_file_page(),
    which resulted in buf_pool.flush_list.end becoming corrupted.
    
    buf_pool_t::delete_from_flush_list(), buf_flush_relocate_on_flush_list():
    First remove the block from buf_pool.flush_list, and only then
    invoke buf_page_t::clear_oldest_modification(), to ensure that
    reading oldest_modification()==0 really implies that the block
    no longer is in buf_pool.flush_list.
    5f22511e
buf0buf.h 79.7 KB