• Marko Mäkelä's avatar
    MDEV-26010 fixup: Use acquire/release memory order · 759deaa0
    Marko Mäkelä authored
    In commit 5f22511e we depend on
    Total Store Ordering. For correct operation on ISAs that implement
    weaker memory ordering, we must explicitly use release/acquire stores
    and loads on buf_page_t::oldest_modification_ to prevent a race condition
    when buf_page_t::list does not happen to be on the same cache line.
    
    buf_page_t::clear_oldest_modification(): Assert that the block is
    not in buf_pool.flush_list, and use std::memory_order_release.
    
    buf_page_t::oldest_modification_acquire(): Read oldest_modification_
    with std::memory_order_acquire. In this way, if the return value is 0,
    the caller may safely assume that it will not observe the buf_page_t
    as being in buf_pool.flush_list, even if it is not holding
    buf_pool.flush_list_mutex.
    
    buf_flush_relocate_on_flush_list(), buf_LRU_free_page():
    Invoke buf_page_t::oldest_modification_acquire().
    759deaa0
my_atomic_wrapper.h 2.92 KB