Use atomic swap to ensure only 1 wake operation procedes

This commit is contained in:
Aode (Lion) 2022-01-29 17:41:07 -06:00
parent efc736f88d
commit 3aa0f237b3

View file

@ -207,7 +207,7 @@ struct SafeWaker {
impl Wake for SafeWaker {
fn wake(self: std::sync::Arc<Self>) {
if let Some(task) = Weak::upgrade(&self.task) {
if !task.woken.load(Ordering::Acquire) {
if !task.woken.swap(true, Ordering::AcqRel) {
if let Some(runtime) = Weak::upgrade(&self.runtime) {
let mut inner = runtime.lock().unwrap();
inner.wake(task);