From e039c44a534713ef49173e723695caa6eb767c97 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Thu, 24 Dec 2020 21:20:33 +0900 Subject: [PATCH] Replace deprecated compare_and_swap with compare_exchange --- src/lib.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 17f87f4..53c1e8b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,7 @@ use std::cell::UnsafeCell; use std::fmt; use std::sync::atomic::AtomicUsize; -use std::sync::atomic::Ordering::{Acquire, Release, AcqRel}; +use std::sync::atomic::Ordering::{AcqRel, Acquire, Release}; use std::task::Waker; /// A synchronization primitive for task wakeup. @@ -261,7 +261,11 @@ impl AtomicWaker { /// } /// ``` pub fn register(&self, waker: &Waker) { - match self.state.compare_and_swap(WAITING, REGISTERING, Acquire) { + match self + .state + .compare_exchange(WAITING, REGISTERING, Acquire, Acquire) + .unwrap_or_else(|x| x) + { WAITING => { unsafe { // Locked acquired, update the waker cell @@ -277,8 +281,9 @@ impl AtomicWaker { // nothing to acquire, only release. In case of concurrent // wakers, we need to acquire their releases, so success needs // to do both. - let res = self.state.compare_exchange( - REGISTERING, WAITING, AcqRel, Acquire); + let res = self + .state + .compare_exchange(REGISTERING, WAITING, AcqRel, Acquire); match res { Ok(_) => { @@ -342,9 +347,7 @@ impl AtomicWaker { // // We just want to maintain memory safety. It is ok to drop the // call to `register`. - debug_assert!( - state == REGISTERING || - state == REGISTERING | WAKING); + debug_assert!(state == REGISTERING || state == REGISTERING | WAKING); } } } @@ -389,9 +392,8 @@ impl AtomicWaker { // not. // debug_assert!( - state == REGISTERING || - state == REGISTERING | WAKING || - state == WAKING); + state == REGISTERING || state == REGISTERING | WAKING || state == WAKING + ); None } }