• Marko Mäkelä's avatar
    MDEV-24864 Fatal error in buf_page_get_low() / fseg_page_is_free() · 638ede5b
    Marko Mäkelä authored
    The fix of MDEV-24569 and MDEV-24695 introduced a race condition when
    a table is being rebuilt or dropped during the fseg_page_is_free() check.
    The server would occasionally crash during the execution of the test
    encryption.create_or_replace.
    
    The fil_space_t::STOPPING flag can be set by DDL operations. Normally,
    such concurrent operations are prevented by a metadata lock (MDL).
    However, neither the change buffer merge nor the fil_crypt_thread() are
    protected by MDL.
    
    fil_crypt_read_crypt_data(), xdes_get_descriptor_const(): Pass the
    BUF_GET_POSSIBLY_FREED flag to avoid the fatal error in buf_page_get_low()
    if a DDL operation was just initiated.
    638ede5b
fil0crypt.cc 70.5 KB