• Meng-Hsiu Chiang's avatar
    [MDEV-28162] Replace PFS_atomic with std::atomic<T> · 55db59f1
    Meng-Hsiu Chiang authored
    PFS_atomic class contains wrappers around my_atomic_* operations, which
    are macros to GNU atomic operations (__atomic_*). Due to different
    implementations of compilers, clang may encounter errors when compiling
    on x86_32 architecture.
    
    The following functions are replaced with C++ std::atomic type in
    performance schema code base:
      - PFS_atomic::store_*()
          -> my_atomic_store*
            -> __atomic_store_n()
        => std::atomic<T>::store()
    
      - PFS_atomic::load_*()
          -> my_atomic_load*
            -> __atomic_load_n()
        => std::atomic<T>::load()
    
      - PFS_atomic::add_*()
          -> my_atomic_add*
            -> __atomic_fetch_add()
        => std::atomic<T>::fetch_add()
    
      - PFS_atomic::cas_*()
        -> my_atomic_cas*
          -> __atomic_compare_exchange_n()
        => std::atomic<T>::compare_exchange_strong()
    
    and PFS_atomic class could be dropped completely.
    
    Note that in the wrapper memory order passed to original GNU atomic
    extensions are hard-coded as `__ATOMIC_SEQ_CST`, which is equivalent to
    `std::memory_order_seq_cst` in C++, and is the default parameter for
    std::atomic_* functions.
    
    All new code of the whole pull request, including one or several files
    that are either new files or modified ones, are contributed under the
    BSD-new license. I am contributing on behalf of my employer Amazon Web
    Services.
    55db59f1
pfs_instr_class.cc 59.6 KB