From 51bb18f989d198aa648b2481865abd0734520d35 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Fri, 1 Dec 2017 13:52:24 +0400 Subject: [PATCH] MDEV-14529 - InnoDB rw-locks: optimize memory barriers Relax memory barrier for waiters: these 2 stores must be completed before os_event_set() finishes. This is guaranteed by RELEASE barrier issued by mutex.exit() of os_event_set(). --- storage/innobase/include/sync0rw.ic | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/storage/innobase/include/sync0rw.ic b/storage/innobase/include/sync0rw.ic index 9e3d2996ad3..e9ee2bfb518 100644 --- a/storage/innobase/include/sync0rw.ic +++ b/storage/innobase/include/sync0rw.ic @@ -420,7 +420,8 @@ rw_lock_x_unlock_func( exist when there is a writer. */ if (my_atomic_load32_explicit(&lock->waiters, MY_MEMORY_ORDER_RELAXED)) { - my_atomic_store32((int32*) &lock->waiters, 0); + my_atomic_store32_explicit(&lock->waiters, 0, + MY_MEMORY_ORDER_RELAXED); os_event_set(lock->event); sync_array_object_signalled(); } @@ -474,7 +475,8 @@ rw_lock_sx_unlock_func( holder. */ if (my_atomic_load32_explicit(&lock->waiters, MY_MEMORY_ORDER_RELAXED)) { - my_atomic_store32((int32*) &lock->waiters, 0); + my_atomic_store32_explicit(&lock->waiters, 0, + MY_MEMORY_ORDER_RELAXED); os_event_set(lock->event); sync_array_object_signalled(); }