• Marko Mäkelä's avatar
    MDEV-22790 Race between btr_page_mtr_lock() dropping AHI on the same block · 138c11cc
    Marko Mäkelä authored
    This race condition was introduced by
    commit ad6171b9 (MDEV-22456).
    
    In the observed case, two threads were executing
    btr_search_drop_page_hash_index() on the same block,
    to free a stale entry that was attached to a dropped index.
    Both threads were holding an S latch on the block.
    
    We must prevent the double-free of block->index by holding
    block->lock in exclusive mode.
    
    btr_search_guess_on_hash(): Do not invoke
    btr_search_drop_page_hash_index(block) to get rid of
    stale entries, because we are not necessarily holding
    an exclusive block->lock here.
    
    buf_defer_drop_ahi(): New function, to safely drop stale
    entries in buf_page_mtr_lock(). We will skip the call to
    btr_search_drop_page_hash_index(block) when only requesting
    bufferfixing (no page latch), because in that case, we should
    not be accessing the adaptive hash index, and we might get
    a deadlock if we acquired the page latch.
    138c11cc
btr0sea.cc 53.3 KB