diff options
author | Sergey Vojtovich <svoj@mariadb.org> | 2018-10-14 15:10:31 +0400 |
---|---|---|
committer | Sergey Vojtovich <svoj@mariadb.org> | 2018-12-27 22:46:38 +0400 |
commit | e60dc209d492e237234dac63293e33558a0daba7 (patch) | |
tree | 5e96d85482a1d0ebb2cbbd2782011e8fdb61eb60 /storage/innobase/include | |
parent | 9581c4a8f5d6c87a6d34c6d3b826c32bf7f15143 (diff) | |
download | mariadb-git-e60dc209d492e237234dac63293e33558a0daba7.tar.gz |
MDEV-17441 - InnoDB transition to C++11 atomics
Almost trivial rw_lock_t::waiters transition. Since C++11 doesn't
seem to allow mixed (atomic and non-atomic) access to atomic variables,
we have to perform atomic initialisation.
Diffstat (limited to 'storage/innobase/include')
-rw-r--r-- | storage/innobase/include/sync0rw.h | 2 | ||||
-rw-r--r-- | storage/innobase/include/sync0rw.ic | 12 |
2 files changed, 5 insertions, 9 deletions
diff --git a/storage/innobase/include/sync0rw.h b/storage/innobase/include/sync0rw.h index b8a1c487f3c..664a0ddd868 100644 --- a/storage/innobase/include/sync0rw.h +++ b/storage/innobase/include/sync0rw.h @@ -572,7 +572,7 @@ struct rw_lock_t std::atomic<int32_t> lock_word; /** 1: there are waiters */ - int32_t waiters; + std::atomic<int32_t> waiters; /** number of granted SX locks. */ volatile ulint sx_recursive; diff --git a/storage/innobase/include/sync0rw.ic b/storage/innobase/include/sync0rw.ic index fc24812ab5b..3add168edc8 100644 --- a/storage/innobase/include/sync0rw.ic +++ b/storage/innobase/include/sync0rw.ic @@ -414,10 +414,8 @@ rw_lock_x_unlock_func( We need to signal read/write waiters. We do not need to signal wait_ex waiters, since they cannot exist when there is a writer. */ - if (my_atomic_load32_explicit(&lock->waiters, - MY_MEMORY_ORDER_RELAXED)) { - my_atomic_store32_explicit(&lock->waiters, 0, - MY_MEMORY_ORDER_RELAXED); + if (lock->waiters.load(std::memory_order_relaxed)) { + lock->waiters.store(0, std::memory_order_relaxed); os_event_set(lock->event); sync_array_object_signalled(); } @@ -474,10 +472,8 @@ rw_lock_sx_unlock_func( waiters. We do not need to signal wait_ex waiters, since they cannot exist when there is an sx-lock holder. */ - if (my_atomic_load32_explicit(&lock->waiters, - MY_MEMORY_ORDER_RELAXED)) { - my_atomic_store32_explicit(&lock->waiters, 0, - MY_MEMORY_ORDER_RELAXED); + if (lock->waiters.load(std::memory_order_relaxed)) { + lock->waiters.store(0, std::memory_order_relaxed); os_event_set(lock->event); sync_array_object_signalled(); } |