• Marko Mäkelä's avatar
    MDEV-26293 InnoDB: Failing assertion: space->is_ready_to_close() ... · a1267724
    Marko Mäkelä authored
    fil_space_t::acquire_low(): Introduce a parameter that specifies
    which flags should be avoided. At all times, referenced() must not
    be incremented if the STOPPING flag is set. When fil_system.mutex
    is not being held by the current thread, the reference must not be
    incremented if the CLOSING flag is set (unless NEEDS_FSYNC is set,
    in fil_space_t::flush()).
    
    fil_space_t::acquire(): Invoke acquire_low(STOPPING | CLOSING).
    In this way, the reference count cannot be incremented after
    fil_space_t::try_to_close() invoked fil_space_t::set_closing().
    
    If the CLOSING flag was set, we must retry acquire_low() after
    acquiring fil_system.mutex.
    
    fil_space_t::prepare_acquired(): Replaces prepare(true).
    
    fil_space_t::acquire_and_prepare(): Replaces prepare().
    This basically retries fil_space_t::acquire() after
    acquiring fil_system.mutex.
    a1267724
fil0fil.h 57.7 KB