mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
[MDEV-28162] Replace PFS_atomic with std::atomic<T>
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.
This commit is contained in:
committed by
Marko Mäkelä
parent
d5bad49011
commit
55db59f16d
@@ -28,6 +28,8 @@
|
||||
Performance schema user (declarations).
|
||||
*/
|
||||
|
||||
#include <atomic>
|
||||
|
||||
#include "pfs_lock.h"
|
||||
#include "lf.h"
|
||||
#include "pfs_con_slice.h"
|
||||
@@ -58,22 +60,22 @@ struct PFS_ALIGNED PFS_user : public PFS_connection_slice
|
||||
public:
|
||||
inline void init_refcount(void)
|
||||
{
|
||||
PFS_atomic::store_32(& m_refcount, 1);
|
||||
m_refcount.store(1);
|
||||
}
|
||||
|
||||
inline int get_refcount(void)
|
||||
{
|
||||
return PFS_atomic::load_32(& m_refcount);
|
||||
return m_refcount.load();
|
||||
}
|
||||
|
||||
inline void inc_refcount(void)
|
||||
{
|
||||
PFS_atomic::add_32(& m_refcount, 1);
|
||||
m_refcount.fetch_add(1);
|
||||
}
|
||||
|
||||
inline void dec_refcount(void)
|
||||
{
|
||||
PFS_atomic::add_32(& m_refcount, -1);
|
||||
m_refcount.fetch_sub(1);
|
||||
}
|
||||
|
||||
void aggregate(bool alive);
|
||||
@@ -97,7 +99,7 @@ public:
|
||||
ulonglong m_disconnected_count;
|
||||
|
||||
private:
|
||||
int m_refcount;
|
||||
std::atomic<int> m_refcount;
|
||||
};
|
||||
|
||||
int init_user(const PFS_global_param *param);
|
||||
|
Reference in New Issue
Block a user