From c866ba80e4c38b0119823ab93f822f8e9dae2ce7 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Wed, 25 Aug 2021 01:18:24 +0100 Subject: [PATCH] Fix memory orderings on rwlock upgrade. Fixes #294 --- src/raw_rwlock.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/raw_rwlock.rs b/src/raw_rwlock.rs index 75a98128..19b61c81 100644 --- a/src/raw_rwlock.rs +++ b/src/raw_rwlock.rs @@ -362,7 +362,7 @@ unsafe impl lock_api::RawRwLockUpgrade for RawRwLock { unsafe fn upgrade(&self) { let state = self.state.fetch_sub( (ONE_READER | UPGRADABLE_BIT) - WRITER_BIT, - Ordering::Relaxed, + Ordering::Acquire, ); if state & READERS_MASK != ONE_READER { let result = self.upgrade_slow(None); @@ -377,7 +377,7 @@ unsafe impl lock_api::RawRwLockUpgrade for RawRwLock { .compare_exchange_weak( ONE_READER | UPGRADABLE_BIT, WRITER_BIT, - Ordering::Relaxed, + Ordering::Acquire, Ordering::Relaxed, ) .is_ok()