From 16ecfbeeb44c200f39b379f281d54ae6c0801746 Mon Sep 17 00:00:00 2001 From: Thomas de Zeeuw Date: Fri, 8 Jan 2021 13:17:45 +0100 Subject: [PATCH] Remove usage of AtomicUsize::compare_exchange It is going to be deprecated in 1.50, but it's already producing warnings on nightly. --- src/lib.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 247424517..c8cb071ac 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -324,12 +324,18 @@ impl AtomicUsize { } #[cfg(atomic_cas)] - fn compare_and_swap(&self, current: usize, new: usize, _order: Ordering) -> usize { + fn compare_exchange( + &self, + current: usize, + new: usize, + _success: Ordering, + _failure: Ordering, + ) -> Result { let prev = self.v.get(); if current == prev { self.v.set(new); } - prev + Ok(prev) } } @@ -1338,7 +1344,15 @@ fn set_logger_inner(make_logger: F) -> Result<(), SetLoggerError> where F: FnOnce() -> &'static dyn Log, { - match STATE.compare_and_swap(UNINITIALIZED, INITIALIZING, Ordering::SeqCst) { + let old_state = match STATE.compare_exchange( + UNINITIALIZED, + INITIALIZING, + Ordering::SeqCst, + Ordering::SeqCst, + ) { + Ok(s) | Err(s) => s, + }; + match old_state { UNINITIALIZED => { unsafe { LOGGER = make_logger();